この例の AES 暗号化機能をテストしています。IV
別のランダム データに変更すると、テキストの一部だけがアクセスできなくなり、他の部分は正しく復号化されることがわかりました。
これは私のコードです:
public static string encrypt(string original, string key, string iv)
{
string enc;
// Create a new instance of the RijndaelManaged
// class. This generates a new key and initialization
// vector (IV).
// Encrypt the string to an array of bytes.
byte[] encrypted =EncryptStringToBytes_Aes(original, Convert.FromBase64String(key), Convert.FromBase64String(iv));
enc = Convert.ToBase64String(encrypted);
return enc;
}
public static string decrypt(string encrypted, string key, string iv)
{
string decrypted;
decrypted = DecryptStringFromBytes_Aes(Convert.FromBase64String(encrypted), Convert.FromBase64String(key), Convert.FromBase64String(iv));
return decrypted;
}
そして、これらは私のEncryptStringToBytes_Aes
andDecryptStringFromBytes_Aes
関数です。
たとえば、私の入力文字列はHello, I think Hugo is a great movie!
. base64ed keylbMvxzBtu057yeNV5d/5MC7tlau7zfRXMtfLSUOBa7ueMGqRrm23H5uYGLmDcdJ3
とbase64ed IVで暗号化されます。(上記のコードでわかるように、base64 化されたキーと IV を関数の入力として取得し、それらを関数でデコードします)gbpldgjBitwQXrQbbyHr+5J0cXADYAm+po8B29rYVJc=
Ti7OcORScdXS/Ll7m1KdeQ==
ここで、IV を変更しm4u5eqD7BZP11P5PYGfV7Q==
てもキーには触れずに、暗号化された文字列を復号化しようとすると、次の結果が得られます��f+�T\/]�^h�ugo is a great movie!
。
ご覧のとおり、入力文字列 ( ugo is a great movie!
) の一部が正常に復号化されました。それは普通ですか?はいの場合、これを防ぐ方法は? これよりも安全なアルゴリズムは他にありますか? いいえの場合、コードの何が問題になっていますか?