2012-02-17 16 views
8

Tôi cần mã hóa kết quả thực thi với RC4. Trước khi thực hiện kịch bản bash, tôi đang thử nghiệm cách mã hóa dữ liệu.RC4 không hoạt động đúng với lệnh openssl?

Tôi đang sử dụng các lệnh tiếp theo:

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

Và kết quả là:

0000000: bdb1 7f03        .... 

bây giờ, nếu tôi cố gắng làm điều tương tự với bộ mã hóa này RC4 trực tuyến http://www.fyneworks.com/encryption/rc4-encryption/index.asp đầu ra là: DA EA 54 65

Đầu ra khác nhau, với cùng một dữ liệu và cùng một khóa ?? Dữ liệu: phím "test": "test"

Ngoài ra tôi đã kiểm tra với một chương trình nhỏ mà tôi đã mã hóa trong C và đầu ra cũng giống như bộ mã hóa trực tuyến ... vì vậy, câu hỏi là, những gì tôi ' m làm sai với lệnh openssl ??

Cảm ơn!

Trả lời

11

RC4 có các phím có độ dài thay đổi và tiện ích mã hóa OpenSSL buộc bạn phải chọn kích thước khóa. Những triển khai khác mà bạn đang thử nghiệm không thực hiện hạn chế như vậy, vì vậy các khóa của bạn không khớp.

Các documentation hảo cho tiện ích enc mô tả các kích thước quan trọng cho phép các thuật toán mã hóa:

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

Vì vậy, RC4 chỉ hoạt động trên một phím 128-bit (16-byte). Ngoài ra, tùy chọn -k có nghĩa là lấy được khóa từ cụm mật khẩu đã cho. Nó thực hiện điều này bằng cách sử dụng hàm EVP_BytesToKey, thực hiện chức năng dẫn xuất khóa (KDF).

Dù sao, câu chuyện dài ngắn, triển khai RC4 của bạn không sử dụng cùng một khóa. Sử dụng tùy chọn -p có OpenSSL in phím thực tế nó đang sử dụng:

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

Hơn nữa, kể từ khi nó được mong đợi phím 16-byte, nó sẽ zero-pad phím ngắn hơn ngay cả khi bạn chỉ định khóa ngắn với -K (tùy chọn chữ hoa K). Bạn có thể sử dụng xxd để tìm các giá trị ascii hex của "test" và -p một lần nữa để xem khóa OpenSSL của:

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

Vì vậy, bạn phải phù hợp với độ dài chìa khóa và chỉ định một phím hex-giá trị với các tùy chọn -K và bạn sẽ xem việc triển khai RC4 là tương đương. Ví dụ: ở đây tôi sử dụng RC-40 để hạn chế độ dài khóa thành 5 byte và sử dụng khóa 5 byte "kiểm tra" hoặc 74 65 73 74 73.

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

Bạn sẽ thấy rằng việc triển khai web của bạn nhận được kết quả tương tự khi đưa ra "kiểm tra" chính.