あるアプリケーションで接続文字列を暗号化し、別のアプリケーションで復号化する必要があるという要件があります。これを念頭に置いて、公開鍵と秘密鍵をそれぞれアプリケーションの 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
それでも、暗号化されたデータが毎回変化していることがわかります。 しかし、Bad Dataエラーは見られなくなりました。それでも、接続文字列のような巨大な文字列を暗号化できず、例外をスローするため、Encoding.UTF8ではなくUTF16(UnicodeEncoding)を使用できません。
CryptographicException: Key not valid for use in specified state.
更新 2:
UTF8Encoding ByteConverter = new UTF8Encoding();
使用してから実行することで、不良データの問題を解決できましたByteConverter .GetString("HUGE STRING");