如何使用C#.NET在PEM文件中使用P-256密钥计算ECDSA签名? [英] How to compute the ECDSA signature using a P-256 key in a PEM file using C#.NET?
本文介绍了如何使用C#.NET在PEM文件中使用P-256密钥计算ECDSA签名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是密码学新手,在Windows上尝试使用C#.NET解决这个问题让我摸不着头脑
我生成了一条椭圆曲线P-256(也称为。Secp256r1和prime256v1)密钥使用以下命令:openssl ecparam –name prime256v1 -genkey –noout –out private.key
我使用以下命令生成了证书签名请求:
openssl req –new –key private.key –out certreq.csr –sha256
另一个团队给我发送了一个base-64编码的证书作为响应。到目前为止一切顺利。
我现在已经收到了一些"测试"数据,我需要使用私钥来计算其ECDSA签名。私钥如下所示:-----BEGIN EC PRIVATE KEY-----
FunnyHow?LIKEACLOWN?DOIAMUSEYOU?DOIMAKEYOULAUGH?==
-----END EC PRIVATE KEY-----
到目前为止,我一直在为类似以下代码而苦苦挣扎:
byte[] cngBlob; // This was calculated based on another StackOverFlow post
byte[] testData = "JoePesciWasGreatInGoodfellas";
CngKey cngKey = CngKey.Import(cngBlob, CngKeyBlobFormat.EccPrivateBlob);
ECDsaCng eCDsaCng = new ECDsaCng(cngKey);
byte[] signatureECDSA = eCDsaCng.SignData(testData);
我尝试使用私钥文件计算byte[] cngBlob
,基于Microsoft CNG | How to import PEM encoded ECDSA private key into MS Key Storage Provider
但我在byte[] signatureECDSA
中没有得到正确答案。
如何从文件中读入私钥,然后使用它来计算测试数据的ECDSA签名?
我已经开始钻研令人着迷的密码学世界,但我需要一些时间才能熟悉它。我在这条路上走对了吗?在此期间,任何帮助我解决这个问题的提示都将不胜感激。
推荐答案
原来上面的代码是正确的方法,但我犯了一个错误。我实际上已经使用方法计算了测试数据的散列
byte[] HashAlgorithm.ComputeHash(byte[] buffer)
我试图签署的正是测试数据的这个散列值。我上面的测试数据应该如下所示
byte[] testData = null;
using (SHA256 sha256 = SHA256.Create())
{
testData = sha256.ComputeHash("JoePesciWasGreatInGoodfellas");
}
我没有意识到计算哈希会带来很大的不同。
我必须用来对散列测试数据进行签名的正确调用原来是
byte[] signatureECDSA = eCDsaCng.SignHash(testData);
以下是最终更正后的代码:
byte[] cngBlob; // This was calculated based on another StackOverFlow post
byte[] testData = null;
using (SHA256 sha256 = SHA256.Create())
{
testData = sha256.ComputeHash("JoePesciWasGreatInGoodfellas");
}
CngKey cngKey = CngKey.Import(cngBlob, CngKeyBlobFormat.EccPrivateBlob);
ECDsaCng eCDsaCng = new ECDsaCng(cngKey);
byte[] signatureECDSA = eCDsaCng.SignHash(testData);
注意:如前面的帖子所述,请参考Microsoft CNG | How to import PEM encoded ECDSA private key into MS Key Storage Provider中的优秀信息,了解如何从PEM文件中的私钥创建cngBlob。
这篇关于如何使用C#.NET在PEM文件中使用P-256密钥计算ECDSA签名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文