У меня есть требование, когда мне нужно зашифровать строку подключения в одном приложении и расшифровать ее в другом. Имея это в виду, я сохраняю открытый ключ и закрытые ключи в App.Config приложения соответственно.
Теперь, не должен ли RSA выдавать мне ту же зашифрованную строку с теми же ключами, которые я использую?
Я все время получаю разные зашифрованные строки с одинаковыми ключами !! Пожалуйста, помогите мне устранить путаницу. Я не понимаю, как я могу решить эту проблему, что я получаю исключение BAD Data, если использую сохраненную зашифрованную строку, поскольку каждый раз при шифровании я получаю разные зашифрованные строки.
Вот мой код:
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));
}
Заранее спасибо.
Обновление 1: я использовал
UnicodeEncoding ByteConverter = new UnicodeEncoding();
ByteConverter.GetBytes("data to encrypt");
//Which is not Connection string but a small test str
Тем не менее я вижу, что зашифрованные данные каждый раз меняются. Но ошибка недопустимые данные больше не отображается. Тем не менее я не могу использовать UTF16 (UnicodeEncoding) вместо Encoding.UTF8, потому что он не может зашифровать огромную строку, такую как строка подключения, и вызывает исключение:
CryptographicException: Key not valid for use in specified state.
Обновление 2:
Я мог бы решить проблему с неверными данными, используя UTF8Encoding ByteConverter = new UTF8Encoding();
, а затем выполнив ByteConverter .GetString("HUGE STRING");
new RSACryptoServiceProvider(4096);
в своем коде, это ошибка. ВСЕГДАRSA.Create()
... - person Jammer   schedule 31.05.2020