gpt4 book ai didi

c# - RSACryptoServiceProvider 不产生一致的输出

转载 作者:行者123 更新时间:2023-11-30 17:15:33 27 4
gpt4 key购买 nike

我需要使用 RSA 加密一些文本,然后使用私钥恢复它。我的问题是 RSACryptoServiceProvider.Encrypt() 每次都输出不同的值,即使使用相同的 key 也是如此。这是我放入 LINQpad 进行测试的代码:

CspParameters cp = new CspParameters();
cp.KeyContainerName = "MyKey";
cp.Flags = CspProviderFlags.UseMachineKeyStore | CspProviderFlags.UseExistingKey;

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);

// using LINQpad to verify the key is loaded properly -- same every time
rsa.ToXmlString(true).Dump();

byte[] rgb = new ASCIIEncoding().GetBytes("Hello world");
byte[] xx = rsa.Encrypt(rgb, false);
string b64 = Convert.ToBase64String(xx);

// this changes every time:
b64.Dump();

我猜测该类必须使用其他东西以及 key 来影响输出,但我正在努力找出是什么。

最佳答案

即使每次加密相同的明文时,密文都不同,但这并不意味着它不能被一致地解密。
这确实是一个好的密码算法能够拥有这种行为的标志,使其更能抵御各种攻击。

这是因为加密逻辑在过程中引入了随机性,例如通过在明文本身之前系统地添加一些随机字节。只要解密逻辑知道在解密整个密文后忽略这些字节,就可以重现原始明文。

我建议您采用此 b64 文本的任何实例,将其提交给逆向过程,并查看生成的“rgb”在所有情况下都是“Hello world”。

关于c# - RSACryptoServiceProvider 不产生一致的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7928916/

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