如何使用C#.NET在PEM文件中使用P-256密钥计算ECDSA签名? [英] How to compute the ECDSA signature using a P-256 key in a PEM file using C#.NET?

查看:0
本文介绍了如何使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆