gpt4 book ai didi

.net - 如何使用 C#.NET 在 PEM 文件中使用 P-256 key 计算 ECDSA 签名?

转载 作者:行者123 更新时间:2023-12-04 17:35:42 24 4
gpt4 key购买 nike

我是密码学的新手,正在努力尝试使用 C#.NET 在 Windows 上解决问题

我使用以下命令生成了一个椭圆曲线 P-256(又名 secp256r1 和 prime256v1) key :

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。

关于.net - 如何使用 C#.NET 在 PEM 文件中使用 P-256 key 计算 ECDSA 签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56740429/

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