【发布时间】:2023-03-02 22:48:01
【问题描述】:
我需要知道什么编码
https://msdn.microsoft.com/en-us/library/bb347054(v=vs.110).aspx
ECDsaCng.SignData Method (Byte[])
默认使用它的字节数组以及如何将其转换为可接受的DER格式
https://www.openssl.org/docs/manmaster/crypto/i2d_ECDSA_SIG.html
这样我就可以使用 ECDSA_do_verify 方法在 OpenSSL 中验证我的 C# 生成的 ECDSA 签名。
我知道它的 SHA1 并且我知道如何加载该摘要,我只是不知道 ECDsaCng.SignData 方法的字节编码是什么,也不知道如何将其转换为 DER 格式,如果我什至需要这样做的话.
【问题讨论】:
-
您提到了 C# 中的 DSA 和 OpenSSL 中的 ECDSA;您实际尝试使用哪种算法?他们不一样...
-
啊抱歉,ECDsaCng.SignData Method (Byte[]) 是什么意思..
-
请注意,对于阅读本文的任何人,正确的函数是 SignHash,因为 ECDSA_do_verify 需要一个已知的摘要,并且 SignData 将使用 .NET 默认值重新散列,这就是给我带来这么多麻烦的原因.有一个使用 C# 密钥的 OpenSSL 验证实现,我在我的个人资料下的一个问题中提出了您可能还想查看的问题。这也可能有帮助:stackoverflow.com/questions/24251336/…
-
啊,我错过了那个微妙之处;我以为你在使用 [ECDsa.SignData(byte[], HashAlgorithmName)](msdn.microsoft.com/en-us/library/mt591029(v=vs.110).aspx)。您调用的那个使用来自 ECDsaCng.HashAlgorithm 的任何算法。 .net 4.6.1 将 SignData 移至 ECDsa 基类并添加了哈希算法参数。
标签: c# c++ openssl signing ecdsa