我有一個需求,我需要在一個應用程序中加密連接字符串,並在另一個應用程序中解密它。考慮到這一點,我將公鑰和私鑰分別保存在應用程序的App.Config中。C#中的RSA不會爲特定的密鑰生成相同的加密字符串?
現在,不應該給我RSA應該給我使用相同的密鑰相同的加密的字符串?
我一直得到不同的加密字符串,使用相同的密鑰。請幫我解決困惑。我不理解我如何解決這個問題,我得到壞數據例外,如果我使用保存的加密字符串,因爲每次加密給我不同的加密字符串。
這裏是我的代碼:
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");
回覆:更新2,Encoding.UTF8是一個UTF8Encoding對象(.Net 4.5) – costa 2016-11-25 01:28:12