【问题标题】:RSA Encryption returning different outputRSA 加密返回不同的输出
【发布时间】:2013-11-16 15:31:15
【问题描述】:

我是 RSA 加密的新手,我一直在尝试使用 .Net 的 System.Security.Cryptography 了解它的工作原理。

    public String Encryption(Byte[] Input, RSAParameters PublicKey)
    {
        RSAC = new RSACryptoServiceProvider();
        RSAC.ImportParameters(PublicKey);
        Byte[] Encrypt = RSAC.Encrypt(Input, false);
        return Convert.ToBase64String(Encrypt);
    }

使用上面的代码,每当我重新启动应用程序时,我都会为相同的输入获得不同的加密字符串。我想知道这是否是正常行为,如果不是,如何预防。

例如,程序为输入“Hello”返回以下字符串:

NopDAF5FRu....

当我重新启动应用程序时,相同输入的输出将是:

pPPu8x6....

但是,当我为我的 RSA 加密类创建新对象时,所有对象都返回相同的输出。

【问题讨论】:

  • 您能否展示您如何测试问题的最后一部分:“但是,当我为我的 RSA 加密类创建新对象时,所有对象都返回相同的输出。”
  • 随机的 RSA 很好。将 false 作为第二个参数传递给 Encrypt 可能不太好,因为与 OAEP 相比,v1.5 填充有一些严重的弱点。

标签: c# encryption cryptography rsa system.security


【解决方案1】:

这是完全正常的。被加密的数据被放置在一个填充有 random 值的块中。然后使用 public 密钥对其进行加密。

查看SO Q&A了解更多详情。

【讨论】:

  • 我想你是对的,我只是搞砸了加密中使用的密钥,因为两者都可以使用,我认为你的答案是正确的,但这里不是随机生成的私钥,因为他没有初始化它。然后模数发生变化,用(公钥)加密的文本发生变化。
  • 使用 RSA,您可以使用 public 密钥加密,因此只有拥有 private 密钥的人才能解密它(即许多人可以拥有您的公钥并单独为您加密某些内容)。因此,公钥是上述问题中唯一需要的东西。
  • 是的,你说得对。感谢您消除疑虑(我需要修改我的密码学)。
猜你喜欢
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多