【问题标题】:How to get same result for same data with RSA encryption如何使用 RSA 加密获得相同数据的相同结果
【发布时间】:2014-09-15 20:51:10
【问题描述】:

我需要一个非对称加密算法,它总是对相同数据的相同结果加密数据。当我使用RSACryptoServiceProvider 时,它总是为我提供相同输入的不同加密数据。

byte[] encrypted1, encrypted2; 

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

这里encrypted1和encrypted2是不同的。

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

  1. 有没有办法改变这种行为?
  2. 还有其他算法可用于此作业吗?如果有它们是什么?

【问题讨论】:

  • 但是为什么要重复加密呢?加密算法通常旨在确保您在解密加密数据时获得纯文本。如果您想比较密码是否匹配等内容,您可以使用 MD5 等哈希算法。
  • 嗯让我考虑一下。

标签: c# encryption


【解决方案1】:

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

您当然可以创建自己的填充,例如使用 Bouncy Castle 的BlindedRSAEngine,但如果删除随机填充,则会使 RSA 的安全性无效。仅当您完全理解其含义时才执行此操作,例如 here。

换句话说:不要去那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    相关资源
    最近更新 更多