RC4 には可変長のキーがあり、OpenSSL の enc ユーティリティではキー サイズを選択する必要があります。テストしているこれらの他の実装では、そのような制限がないため、キーが一致しません。
ユーティリティのドキュメントにはenc
、暗号化に許可されている鍵のサイズが記載されています。
rc4 128 bit RC4
rc4-64 64 bit RC4
rc4-40 40 bit RC4
そのため、RC4 は 128 ビット (16 バイト) キーでのみ機能します。また、この-k
オプションは、指定されたパスフレーズからキーを導出することを意味します。これは、キー派生関数 (KDF) を実装するEVP_BytesToKey関数を使用して内部的に行われます。
とにかく、簡単に言うと、RC4 の実装は同じキーを使用していません。オプションを使用-p
して、OpenSSL が使用している実際のキーを出力します。
$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p
key=098F6BCD4621D373CADE4E832627B4F6
-K
さらに、16 バイトのキーが想定されているため、 (大文字の K) オプションで短いキーを指定した場合でも、短いキーはゼロで埋められます。xxd
「test」の ascii 16 進値を検索し、-p
OpenSSL のキーを再度確認するために使用できます。
$ echo -ne "test" | xxd
0000000: 7465 7374 test
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p
key=74657374000000000000000000000000
したがって、キーの長さを一致させ、オプションで 16 進数のキーを指定する必要があります-K
。RC4 の実装が同等であることがわかります。たとえば、ここでは RC-40 を使用してキーの長さを 5 バイトに制限し、5 バイトのキー「tests」を使用します74 65 73 74 73
。
$ echo -ne "test" | openssl rc4-40 -K 7465737473 -nosalt -e -nopad | xxd
0000000: dd9b 5cb9
キー「tests」を指定すると、Web 実装で同じ結果が得られることがわかります。