C# 返回不同输出的RSA加密
我是RSA加密的新手,我一直在尝试使用.Net的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
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....