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.