RC4 ma klucze o zmiennej długości, a narzędzie do szyfrowania OpenSSL wymusza wybór rozmiaru klucza. Te inne implementacje, które testujesz przeciw, nie powodują takich ograniczeń, więc twoje klucze nie pasują do siebie.
documentation dla narzędzia enc
opisuje dozwolony kluczowych rozmiarach dla szyfru:
rc4 128 bit RC4
rc4-64 64 bit RC4
rc4-40 40 bit RC4
Więc RC4 działa tylko na klucz 128-bitowy (16 bajtów). Ponadto opcja -k
oznacza wyprowadzenie klucza z podanego hasła. Robi to wewnętrznie za pomocą funkcji EVP_BytesToKey, która implementuje funkcję wyprowadzania klucza (KDF).
Krótko mówiąc, twoje wdrożenia RC4 nie używają tego samego klucza. Użyj opcji -p
mieć OpenSSL wydrukować rzeczywisty klucz jest za pomocą:
$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p
key=098F6BCD4621D373CADE4E832627B4F6
Ponadto, ponieważ spodziewa klucze 16-bajtowych, to będzie zero-pad krótszych kluczy, nawet jeśli podać krótki klucz z -K
(wielka litera K) opcja. Można użyć xxd
znaleźć wartości ASCII hex „test” i -p
znowu zobaczyć klucza OpenSSL:
$ echo -ne "test" | xxd
0000000: 7465 7374 test
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p
key=74657374000000000000000000000000
Więc trzeba dopasować długości klucza i określić klucz sześciokątny cenie z opcją -K
i będziesz zobacz implementacje RC4 są równoważne. Np. Tutaj używam RC-40, aby ograniczyć długość klucza do 5 bajtów i użyć 5-bajtowego klucza "testy" lub 74 65 73 74 73
.
$ echo -ne "test" | openssl rc4-40 -K 7465737473 -nosalt -e -nopad | xxd
0000000: dd9b 5cb9
Przekonasz się, że twoja implementacja webowa osiąga ten sam rezultat, gdy otrzymasz klucz "testy".