RC4 имеет ключи переменной длины, а утилита Encryption OpenSSL заставляет вас выбирать размер ключа. Эти другие реализации, которые вы тестируете, не допускают таких ограничений, поэтому ваши ключи не совпадают.
documentation для утилиты enc
описывает допустимые размеры ключей для шифра:
rc4 128 bit RC4
rc4-64 64 bit RC4
rc4-40 40 bit RC4
Так RC4 работает только на ключом 128 бит (16 байт). Кроме того, опция -k
означает получение ключа от данной кодовой фразы. Он делает это внутренне, используя функцию EVP_BytesToKey, которая реализует функцию деривации ключа (KDF).
В любом случае, длинный рассказ, ваши реализации RC4 не используют один и тот же ключ. Используйте опцию -p
иметь OpenSSL печатать фактический ключ, который он использует:
$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p
key=098F6BCD4621D373CADE4E832627B4F6
Далее, так как он ожидает ключи 16 байт, это будет ноль-пэды коротких ключей, даже если указать короткий ключ с -K
(верхний регистр). Вы можете использовать xxd
найти ASCII шестнадцатеричные значения «тест» и -p
снова, чтобы увидеть ключ OpenSSL в:
$ echo -ne "test" | xxd
0000000: 7465 7374 test
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p
key=74657374000000000000000000000000
Таким образом, вы должны соответствовать длины ключа и указать ключ шестигранный значение с опцией -K
и вы будете см. реализации 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
Вы обнаружите, что ваша веб-реализация получает тот же результат при предоставлении ключевых «тестов».