C# を使用してOpenSSL
署名を検証しようとしています。正しい公開鍵証明書を使用して false を返しています。(created using openssl_sign with SHA1 in PHP)
RSACryptoProvider.VerifyData
これを成功させる方法について何か考えはありますか?
編集:
次のコードで BouncyCastle を使用して OpenSSL SHA1 署名を検証しようとしましたが、検証に失敗しています。署名の計算方法は異なりますか? .NET で検証可能な OpenSSL で署名を作成するにはどうすればよいですか?
byte[] signatureBytes = UTF8Encoding.Default.GetBytes(signature);
byte[] dataBytes = UTF8Encoding.Default.GetBytes(data);
StreamReader sr = new StreamReader(Path.Combine(@"C:\test", @"test\test.crt"));
PemReader pr = new PemReader(sr);
Org.BouncyCastle.X509.X509Certificate cert = (Org.BouncyCastle.X509.X509Certificate)pr.ReadObject();
ISigner sig = SignerUtilities.GetSigner("SHA1WithRSAEncryption");
sig.Init(false, cert.GetPublicKey());
sig.BlockUpdate(dataBytes, 0, dataBytes.Length);
if (sig.VerifySignature(signatureBytes)) {
Console.WriteLine("all good!");
}
PHP コード:
function signTokenWithPrivateKey($message, $keyLocation) {
try {
if (file_exists($keyLocation)) {
$privateKey= openssl_get_privatekey(file_get_contents($keyLocation));
$signature = '';
if (!openssl_sign($message, $signature, $privateKey)) {
die('Failed to encrypt');
}
openssl_free_key($privateKey);
}
}
catch (Exception $ex) {
}
return $signature;
}