gpt4 book ai didi

c# - 使用 RSACryptoProvider 在 C# 中验证 PHP OpenSSL 签名

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:28 24 4
gpt4 key购买 nike

我正在尝试使用 C# RSACryptoProvider 验证 OpenSSL 签名 (在 PHP 中使用 openssl_sign 和 SHA1 创建) .验证数据。它使用正确的公钥证书返回 false。

知道如何成功地做到这一点吗?

编辑:

我尝试使用 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;
}

最佳答案

下面的代码应该可以为您解决问题。它从给定的文件路径加载证书,然后使用公钥根据给定的签名验证数据。如果有效则返回真。

            byte[] signature = Convert.FromBase64String(Signature);

byte[] data = Encoding.UTF8.GetBytes(Data);

var x509 = new X509Certificate2(Path.Combine(@"C:\test", @"test\test.crt"));

var rsa = x509.PublicKey.Key as RSACryptoServiceProvider;
if (rsa == null)
{
LogMessage("Authorize", "Invalid", Level.Alert);
return false;
}

string sha1Oid = CryptoConfig.MapNameToOID("SHA1");

//use the certificate to verify data against the signature
bool sha1Valid = rsa.VerifyData(data, sha1Oid, signature);

return sha1Valid;

关于c# - 使用 RSACryptoProvider 在 C# 中验证 PHP OpenSSL 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com