【发布时间】:2011-12-17 06:04:39
【问题描述】:
我需要用 RSA 加密一些文本,然后使用私钥恢复它。我的问题是 RSACryptoServiceProvider.Encrypt() 每次输出不同的值,即使使用相同的键也是如此。这是我放入 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();
我猜这个类一定是在使用其他东西以及影响输出的关键,但我正在努力找出是什么。
【问题讨论】:
-
解密数据时,每次得到的结果都是一样的吗?
-
好吧,我以为我没有。这就是为什么我把它全部带回去查看加密的文本,看看它是一样的。但是在我更新答案之前我无法重现这个问题——我想我在 Encrypt() 的第二个参数中混合了填充类型。
标签: c# encryption cryptography padding rsacryptoserviceprovider