0

このサイトからいくつかの AES 実装コードをコンパイルしました。128 ビット キー暗号化を実行することになっています。一緒に問題なく動作する暗号化/復号化プログラムをテストしました。

ただし、上記のコードで何かを暗号化し、Linux に組み込まれている openssl ツールで復号化しようとすると、復号化できず、不正なマジック ナンバーエラーがログに記録されます。同様に、openssl で何かを暗号化し、コードで復号化しようとしても機能しません。私は両方のcbc ecbで試しました。

両方とも AES を実装している場合、同じように動作するはずではありませんか?

4

1 に答える 1

1

C コードは ECB を使用しており、パディングを行っていないようです。そのため、16 バイトのメッセージ (倍数) とそれに続く 16 バイトの値 16 (pkcs#7 パディング) を暗号化してみてください。または、openssl で 16 バイトのメッセージ (倍数) と --nopad を使用します (動作する可能性が高くなります)。また、aes-128-ecb またはそれが呼ばれるものを使用します。

ブロック暗号は、テキストの「チャンク」で機能します。この場合、長さは 16 文字です。したがって、パディングについて心配したくない場合は、正確な数のチャンクを指定する必要があります。

また、ecb モード (追加の処理なしで各チャンクを順番に実行する) は、多くの用途で安全ではありません。ウィキペディアの記事を参照してください (ペンギンの写真を見てください)。

[編集:] [編集2:]

> echo -n "abcdabcdabcdabcd" > msg
> wc msg
 0  1 16 msg
> openssl enc -aes-128-ecb -nopad -in msg -K 0 -S "" -iv ""
[noise]
> openssl enc -aes-128-ecb -nopad -in msg -K 0 -S "" -iv "" | wc
 0 1 16

上記を自分で試して、他のコードがそれを解読するかどうかを確認してください (編集 2 はキーを明示的に設定し、IV とソルトを削除します - この場合、後者の 2 つは何のためにあるのかわかりません)。

[編集3:]

私が知る限り、問題はパスワードがキーに変換される方法に関連しています。openssl は、キーを 16 進数 ( ) として指定しない限り、取り除けない余分なことをしているよう-K 0です。私がそうすると、他のプログラムは動作しません (パスワードが必要です)。

申し訳ありませんが、私はアイデアがありません。

于 2013-07-08T00:48:10.990 に答える