gpt4 book ai didi

c# - 为什么 ECDSA 会为相同的数据生成不同的签名,而 RSA 不会?

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

考虑使用 RSA 的以下代码...
示例:

byte[] raw = Encoding.Default.GetBytes("Hello, World!");
RSA key = RSA.Create();

for (int index = 0; index < 5; index++)
{
byte[] signed = key.SignData(raw, HashAlgorithmType.SHA256, RSASignaturePadding.Pkcs1);
string hashed = signed.ToSha256String();
Console.WriteLine(hashed);
}
输出:

043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89


现在考虑相同的代码,除了使用 ECDSA...
示例:
byte[] raw = Encoding.Default.GetBytes("Hello, World!");
ECDsa key = ECDsa.Create();

for (int index = 0; index < 5; index++)
{
byte[] signed = key.SignData(raw, HashAlgorithmType.SHA256);
string hashed = signed.ToSha256String();
Console.WriteLine(hashed);
}
输出:

043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89a31fe9656fc8d3a459e623dc8204e6d0268f8df56d734dac3ca3262edb5db883a871c47a7f48a12b38a994e48a9659fab5d6376f3dbce37559bcb617efe8662dd7ef0a04f3c8055644677299a9414a75adcb15916eb48417416c9317ace2ff4f779f5dd63960abda52a7da70464b92eedd47f84a8dffda2d672e6a99de1bab95


我预期的 RSA 签名输出; ECDSA的,我没有。为什么 ECDSA 会为相同的数据生成不同的签名?

最佳答案

Elliptic Curve Digital Signature Algorithm (ECDSA) 是经典 DSA 算法的改编版,依赖于加密安全 random number generator .例如:ECDSA 签名算法计算消息的哈希值,然后生成一个随机整数 k并计算签名(一对整数 { R , S } )。 R计算自 k , 和 S使用消息哈希+私钥+随机数计算k .所以,签名是非确定性 由于随机性。
您可以尝试使用椭圆曲线 here .

关于c# - 为什么 ECDSA 会为相同的数据生成不同的签名,而 RSA 不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68959590/

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