gpt4 book ai didi

C# ECDsaCng.SignData 在 OpenSSL 中使用签名?

转载 作者:行者123 更新时间:2023-11-28 02:02:51 25 4
gpt4 key购买 nike

我需要知道什么编码

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 格式,如果我什至需要这样做。

最佳答案

ECDSA 签名是值对 (r, s)

Windows CNG 将此作为两个值的串联发出,并且由于 .NET 不会重新解释数据,因此这是事实上的 .NET 格式。 (r为数组前半部分,s为后半部分)

OpenSSL 需要 SEQUENCE(INTEGER(r), INTEGER(s)) 的 DER 编码结构。这大致意味着 { 0x30, payload_length, 0x02, r_length, r_bytes[0]...r_bytes[r_length-1], 0x02, s_length, s_bytes[0]...s_bytes[s_length-1] };尽管它比这稍微复杂一些,因为当 r_bytes[0] 或 s_bytes[0] >= 0x80 时需要填充字节(因为这会使它显示为负数)。

不幸的是,默认情况下框架中没有公开的通用 DER 编码器。

如果您尝试在 Linux 上运行,使用 .NET Core 可能会更好,因为 Linux 的 ECDSA 实现 already does这个数据翻译。

关于C# ECDsaCng.SignData 在 OpenSSL 中使用签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38702169/

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