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) 옵션.
$ echo -ne "test" | xxd
0000000: 7465 7374 test
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p
key=74657374000000000000000000000000
그래서 당신은 키 길이와 일치하고 -K
옵션으로 진수 값 키를 지정해야합니다 그리고 당신은거야 : 당신은 OpenSSL의 키를보고 다시 "테스트"와 -p
의 ASCII 16 진수 값을 찾기 위해 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
당신은 키 "테스트"를 부여 할 때 웹 구현이 같은 결과를 얻을 수 있음을 확인할 수 있습니다.