C#中的RSA不会为特定密钥生成相同的加密字符串?

Nag*_*tri 3 c# rsa utf-8 utf-16 rsacryptoserviceprovider

我有一个要求,我需要在一个应用程序中加密我的连接字符串并在另一个应用程序中解密它.考虑到这一点,我分别在应用程序的App.Config中保存公钥和私钥.

现在,RSA不应该给我相同的加密字符串使用相同的密钥吗?

我总是得到不同的加密字符串,使用相同的密钥.!! 请帮我清除困惑.我不明白如何解决这个问题,如果我使用保存的加密字符串,我会得到BAD数据异常,因为每次加密都会给我不同的加密字符串.

这是我的代码:

private string connecString;
private RSACryptoServiceProvider rsaEncryptDecrypt;

public EncryptAndDecrypt(string connecString)
{
    this.connecString = connecString;
    this.rsaEncryptDecrypt = new RSACryptoServiceProvider(4096);
}

public string EncryptTheConnecString(string publicKeyValue)
{
    byte[] encryptedData;
    rsaEncryptDecrypt.FromXmlString(publicKeyValue);

    byte[] message = Encoding.UTF8.GetBytes(connecString);
    encryptedData = rsaEncryptDecrypt.Encrypt(message, false);

    return Convert.ToBase64String(encryptedData);
}

public string DecryptTheConnecString(string privateKeyValue, string encrystr)
{
    byte[] decryptedData;
    rsaEncryptDecrypt.FromXmlString(privateKeyValue);

    byte[] message = Convert.FromBase64String(encrystr);
    decryptedData = rsaEncryptDecrypt.Decrypt(message, false);

    return Encoding.UTF8.GetString((decryptedData));
}
Run Code Online (Sandbox Code Playgroud)

先感谢您.

更新1: 我用过

UnicodeEncoding ByteConverter = new UnicodeEncoding();
ByteConverter.GetBytes("data to encrypt");
//Which is not Connection string but a small test str
Run Code Online (Sandbox Code Playgroud)

我仍然看到加密数据每次都在变化. 坏数据误差不可见.然而,我不能使用UTF16(UnicodeEncoding)而不是Encoding.UTF8,因为它无法像连接字符串那样加密巨大的字符串并引发异常:

 CryptographicException: Key not valid for use in specified state.
Run Code Online (Sandbox Code Playgroud)

更新2:

我可以通过使用UTF8Encoding ByteConverter = new UTF8Encoding();然后再做来解决数据不良的问题ByteConverter .GetString("HUGE STRING");

And*_*ykh 6

它可能因随机填充而发生.