2012-02-17 22 views
8

RC4で実行結果をエンコードする必要があります。 bashスクリプトを実行する前に、データを暗号化する方法をテストしています。私は、次のコマンドを使用していopensslコマンドでRC4が正しく動作しませんか?

echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad | xxd 

、出力は次のとおりです。

0000000: bdb1 7f03        .... 

今、私はhttp://www.fyneworks.com/encryption/rc4-encryption/index.asp出力され、このオンラインRC4エンコーダと同じことをしようとした場合: DA EA 54 65

出力が同じで、同じデータと同じキーを使用していますか?データ: "テスト"キー: "テスト"

また、私はCでコーディングした小さなプログラムでチェックしました。出力はオンラインエンコーダと同じです...だから、質問は、 opensslコマンドで間違っていますか?

ありがとうございます!

答えて

11

RC4には可変長キーがあり、OpenSSLのencユーティリティではキーサイズを選択する必要があります。あなたがテストしている他の実装では、このような制限がないため、キーが一致しません。

encユーティリティのdocumentationは、暗号の許可キーのサイズについて説明します。

rc4    128 bit RC4 
    rc4-64    64 bit RC4 
    rc4-40    40 bit RC4 

のでRC4のみ128ビット(16バイト)キーで動作します。また、-kオプションは、指定されたパスフレーズからキーを派生させることを意味します。これは内部でキー導出関数(KDF)を実装するEVP_BytesToKey関数を使用して行います。

とにかく、あなたのRC4の実装は同じキーを使用していません。あなたは-Kと短いキーを指定した場合でも、それは、ゼロパッドます短い鍵を、それが16バイトのキーを期待していますので、また、

$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p 
key=098F6BCD4621D373CADE4E832627B4F6 

:OpenSSLは、それが使用している実際のキーをプリント持つように-pオプションを使用します(大文字のK)オプションです。ですから、キーの長さと一致して-Kオプションで進値のキーを指定する必要があります

$ echo -ne "test" | xxd 
0000000: 7465 7374        test 
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p 
key=74657374000000000000000000000000 

、あなたがされます:あなたは、OpenSSLのキーを参照するには、再度「テスト」と-pのアスキー進値を見つけるためにxxdを使用することができますRC4の実装は同等です。たとえば、ここではRC-40を使用してキーの長さを5バイトに制限し、5バイトのキー "テスト"、つまり74 65 73 74 73を使用します。

$ echo -ne "test" | openssl rc4-40 -K 7465737473 -nosalt -e -nopad | xxd 
0000000: dd9b 5cb9 

キーの「テスト」が指定されていると、Web実装で同じ結果が得られます。

関連する問題