RSA 加密返回不同的输出

Tra*_*ent 5 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 = RSAC.Encrypt(Input, false);
        return Convert.ToBase64String(Encrypt);
    }
Run Code Online (Sandbox Code Playgroud)

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

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

NopDAF5FRu....
Run Code Online (Sandbox Code Playgroud)

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

pPPu8x6....
Run Code Online (Sandbox Code Playgroud)

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

pou*_*pou 6

这是完全正常的,很好。被加密的数据放在一个用随机值填充的块中。这则加密与公共密钥。

有关更多详细信息,请参阅此SO Q&A