如何使用RSA加密获得相同数据的相同结果

时间:2014-09-15 09:00:44

标签: c# encryption

我需要一种非对称加密算法,它始终对相同数据的相同结果加密数据。当我使用RSACryptoServiceProvider时,它总是给我不同的加密数据用于相同的输入。

byte[] encrypted1, encrypted2; 

using ( var RSA1 = new RSACryptoServiceProvider() )
{    
    encrypted1 = RSA1.Encrypt(data, false);
    encrypted2 = RSA1.Encrypt(data, false); 
}

此处encrypted1encrypted2不同。

我听说这是由新RSA实现的随机填充能力引起的。但即使我将填充设置为false,也会发生这种情况。所以;

  1. 有没有办法改变这种行为?
  2. 这项工作还有其他算法吗?如果有什么?

1 个答案:

答案 0 :(得分:1)

您所指的布尔值并不意味着打开或关闭填充。它使用OAEP填充或PKCS#1 v1.5填充(它首先应该不是布尔值,它应该是枚举值)。两种填充机制都部署(部分)随机填充。只要您的随机源确实是随机的,输出就不会是 deterministic

您当然可以创建自己的填充,例如使用Bouncy Castle的BlindedRSAEngine,但如果删除随机填充,则会使RSA的安全性无效。只有在您完全理解其含义时才这样做,例如here

换句话说:不要去那里。