gpt4 book ai didi

c# - 使用 .Net 进行 RSA 签名并使用 OpenSSL 命令进行验证

转载 作者:太空宇宙 更新时间:2023-11-03 12:34:20 25 4
gpt4 key购买 nike

我正在尝试使用 C# 使用 Sha1 哈希和 RSA 对简单数据进行签名,然后使用 OpenSSL 命令对其进行验证。

对于我的测试,我获取了 Windows 上预先存在的本地主机证书。

这是与 C# 一起使用的代码:

static void Main(string[] args)
{
string sValTest = "sampledata";
byte[] signature = Sign(sValTest, "localhost");
string b64 = Convert.ToBase64String(signature);
bool verified = Verify(sValTest, signature, @"pathToCer");
}

static byte[] Sign(string text, string certSubject)
{
X509Store my = new X509Store(StoreName.My, StoreLocation.LocalMachine);
my.Open(OpenFlags.ReadOnly);

RSACryptoServiceProvider csp = null;
foreach (X509Certificate2 cert in my.Certificates)
{
if (cert.Subject.Contains(certSubject))
{
csp = (RSACryptoServiceProvider)cert.PrivateKey;
break;
}
}

SHA1Managed sha1 = new SHA1Managed();
byte[] data = Enconding.ASCII.GetBytes(text);
byte[] hash = sha1.ComputeHash(data);

return csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));
}

static bool Verify(string text, byte[] signature, string certPath)
{
X509Certificate2 cert = new X509Certificate2(certPath);
RSACryptoServiceProvider csp = RSACryptoServiceProvider)cert.PublicKey.Key;

SHA1Managed sha1 = new SHA1Managed();
byte[] data = Encoding.ASCII.GetBytes(text);
byte[] hash = sha1.ComputeHash(data);

return csp.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA1"), signature);
}

(在那个例子中,verified 产生 true)

我将 PFX 的公共(public)部分以及 base 64 签名发送到我的 linux 计算机。

然后我做了以下事情:

base64 --decode sig.b64 > sig
openssl x509 -inform der -in localhost.cer -out localhost.pem
openssl x509 -pubkey -noout -in localhost.pem > localhost.pub.pem
echo -n "sampledata" | openssl dgst -verify localhost.pub.pem -signature sig

验证失败结束。

我检查了两边证书的序列号,是一致的。为了以防万一,我还检查了两个站签名的md5,都清楚。

关于明显失败之处的任何指示?

最佳答案

您在 openssl dgst 命令中缺少哈希算法标识符,默认为 MD5。

你正确的最后一行是

echo -n "sampledata" | openssl dgst -verify localhost.pub.pem -signature sig -sha1

关于c# - 使用 .Net 进行 RSA 签名并使用 OpenSSL 命令进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41555792/

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