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

2024-04-11

我对密码学很陌生,并且在 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使用私钥文件,基于微软 CNG |如何将 PEM 编码的 ECDSA 私钥导入 MS Key Storage Provider https://stackoverflow.com/questions/50080937/microsoft-cng-how-to-import-pem-encoded-ecdsa-private-key-into-ms-key-storage但我没有得到正确的答案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);

注意:正如之前的文章中提到的,请参阅以下优秀信息:微软 CNG |如何将 PEM 编码的 ECDSA 私钥导入 MS Key Storage Provider https://stackoverflow.com/questions/50080937/microsoft-cng-how-to-import-pem-encoded-ecdsa-private-key-into-ms-key-storage查看如何从 PEM 文件中的私钥创建 cngBlob。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 C#.NET 在 PEM 文件中使用 P-256 密钥计算 ECDSA 签名? 的相关文章

随机推荐