質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

1622閲覧

同じ文字列をWindowsにてC#と.NET Framework2.0でAES暗号化した結果とlinuxにてOpenSSL(1.0.2k)のライブラリを利用してAES暗号化した結果が違う

fuoh

総合スコア19

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2020/07/16 13:52

同じ文字列を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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

解決いたしました。
暗号化処理に入力するデータが、Unicodeでした。

投稿2020/07/17 07:47

fuoh

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

動作確認はしていませんが、
OpenSSLはPKCS#7パディングなので、
C#のPaddingMode指定が違いませんか?

diff

1- aes.Padding = PaddingMode.Zeros; 2+ aes.Padding = PaddingMode.PKCS7;

投稿2020/07/16 14:40

SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuoh

2020/07/17 04:57

ご回答いただきまして、ありがとうございます。 確認させていただきます。
fuoh

2020/07/17 05:11

確認いたしましたが、結果は変わりませんでした。 ご対応ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問