C# 返回不同输出的RSA加密

C# 返回不同输出的RSA加密,c#,encryption,cryptography,rsa,system.security,C#,Encryption,Cryptography,Rsa,System.security,我是RSA加密的新手,我一直在尝试使用.Net的System.Security.Cryptography来了解它到底是如何工作的 public String Encryption(Byte[] Input, RSAParameters PublicKey) { RSAC = new RSACryptoServiceProvider(); RSAC.ImportParameters(PublicKey); Byte[] Encrypt

我是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”返回以下字符串:

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

pPPu8x6....

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

这是完全正常的。被加密的数据被放入一个块中,该块用随机值填充。然后用公钥对其进行加密


有关更多详细信息,请参见此部分。

您能否展示您是如何测试问题的最后一部分的:“但是,当我为RSA加密类创建新对象时,所有对象都返回相同的输出。”RSA是随机的就可以了。将
false
作为第二个参数传递给
Encrypt
可能并不好,因为v1.5填充与OAEP相比有一些严重的弱点。这是否回答了您的问题?我认为你是对的,我只是搞乱了加密中使用的密钥,因为两者都可以使用,我认为你的答案是正确的,但不是这里随机生成的私钥,因为他没有初始化它。然后模数发生变化,使用(公钥)加密的文本也发生变化。使用RSA,您使用公钥进行加密,因此只有拥有私钥的人才能解密它(即,许多人可以拥有您的公钥并单独为您加密某些内容)。因此,在上述问题中,公钥是唯一需要的东西。感谢您消除疑虑(我需要修改密码)。
pPPu8x6....