同じ文字列をWindowsにてC#と.NET Framework2.0でAES暗号化した結果とlinuxにてOpenSSL(1.0.2k)のライブラリでAES暗号化した結果が違う事象がありました。
暗号化の条件は、以下の通りです。
- AES_128_CBC
- キーと初期ベクトルを指定(Windowsとlinuxで同じ値)
- パディング有り
お教えいただきたいのは、同じ文字列を同じ条件で暗号化したはずが、異なる結果となる要因として何が考えられるでしょうか?
以下にWindowsとlinuxで暗号化した結果を記載します。
Windows
14D A5 9E CF 4A 02 44 21 31 02 14 4D 92 D8 64 C4 2C2 A3 72 B8 41 0B CE 91 4A 2A 51 91 1B DE CE 9F 3DA 6F 3D BA A8 B1 3C 75 CC F5 B4 1B 84 C3 1D 79 4DE 37 CF 16 23 C6 E8 81 0B 7D 8B A6 BB C1 96 35 53B 7C 05 5F 20 00 15 11 5F FA 2A 18 49 32 74 08
linux
162 ae 5c 23 aa d9 37 8a 02 76 82 ff f5 61 e6 c1 2a8 ad f8 d2 28 d5 56 05 88 8b 39 c2 58 1d 84 19 383 f8 a9 43 ad 40 68 6f 5c ab b6 0d a8 14 0e 30 400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
以下、Windowsとlinuxで確認した暗号化処理の一部です。
■Windwos C#, .NET Framework2.0
C#
1 RijndaelManaged aes = new RijndaelManaged(); 2 aes.KeySize = _size; 3 aes.Padding = PaddingMode.Zeros; 4 5 // 入出力用のストリーム生成 6 MemoryStream ms = new MemoryStream(); 7 CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(_key, _iV), CryptoStreamMode.Write); 8 9 // ストリームに暗号化するデータを書込 10 cs.Write(data, 0, data.Length); 11 //cs.FlushFinalBlock(); 12 cs.Close(); 13 14 // 暗号化されたデータをbyte配列で取得 15 value = ms.ToArray(); 16 ms.Close(); 17
■linux OpenSSL(1.0.2k)
C
1 if (!EVP_EncryptInit_ex(&ctx, cipher, NULL, key, iv)) { 2 fprintf(stderr, "EncryptInit failed\n"); 3 return 6; 4 } 5 EVP_CIPHER_CTX_set_padding(&ctx, 1); 6 7 if (!EVP_EncryptUpdate(&ctx, out, &out1, in, inLen)) { 8 fprintf(stderr, "Encrypt failed\n"); 9 return 7; 10 } 11 if (!EVP_EncryptFinal_ex(&ctx, out + out1, &out2)) { 12 fprintf(stderr, "EncryptFinal failed\n"); 13 return 8; 14 } 15
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。