2012-02-17 3 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) 옵션.

$ 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 

당신은 키 "테스트"를 부여 할 때 웹 구현이 같은 결과를 얻을 수 있음을 확인할 수 있습니다.