我需要一种非对称加密算法,它始终对相同数据的相同结果加密数据。当我使用RSACryptoServiceProvider
时,它总是给我不同的加密数据用于相同的输入。
byte[] encrypted1, encrypted2;
using ( var RSA1 = new RSACryptoServiceProvider() )
{
encrypted1 = RSA1.Encrypt(data, false);
encrypted2 = RSA1.Encrypt(data, false);
}
此处encrypted1
和encrypted2
不同。
我听说这是由新RSA实现的随机填充能力引起的。但即使我将填充设置为false,也会发生这种情况。所以;
答案 0 :(得分:1)
您所指的布尔值并不意味着打开或关闭填充。它使用OAEP填充或PKCS#1 v1.5填充(它首先应该不是布尔值,它应该是枚举值)。两种填充机制都部署(部分)随机填充。只要您的随机源确实是随机的,输出就不会是 deterministic 。
您当然可以创建自己的填充,例如使用Bouncy Castle的BlindedRSAEngine
,但如果删除随机填充,则会使RSA的安全性无效。只有在您完全理解其含义时才这样做,例如here。
换句话说:不要去那里。