RC4 tiene teclas de longitud variable, y la utilidad enc de OpenSSL te obliga a elegir un tamaño de clave. Estas otras implementaciones que está probando no hacen tal restricción, por lo que sus claves no coinciden.
El documentation para la utilidad enc
describe los tamaños de clave permitidas para el cifrado:
rc4 128 bit RC4
rc4-64 64 bit RC4
rc4-40 40 bit RC4
Así RC4 sólo funcionan en una clave de 128 bits (16 bytes). Además, la opción -k
significa derivar una clave de la frase de contraseña proporcionada. Hace esto internamente utilizando la función EVP_BytesToKey, que implementa una Función de derivación de clave (KDF).
De todos modos, para abreviar, las implementaciones de RC4 no están utilizando la misma clave. Utilice la opción -p
tener OpenSSL imprimir la clave real que está utilizando:
$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p
key=098F6BCD4621D373CADE4E832627B4F6
Además, puesto que está esperando las llaves de 16 bytes, que va con ceros claves más cortas incluso si se especifica una clave corta con el -K
(mayúscula K) opción. Puede utilizar xxd
para encontrar los valores ASCII hexadecimales de "prueba" y -p
de nuevo para ver la clave de OpenSSL:
$ echo -ne "test" | xxd
0000000: 7465 7374 test
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p
key=74657374000000000000000000000000
por lo que debe coincidir con longitudes de clave y especificar una llave hexagonal de valor con la opción -K
y se le ver las implementaciones RC4 son equivalentes. Por ejemplo, aquí utilizo RC-40 para restringir la longitud de la clave a 5 bytes y uso la clave de 5 bytes "pruebas", o 74 65 73 74 73
.
$ echo -ne "test" | openssl rc4-40 -K 7465737473 -nosalt -e -nopad | xxd
0000000: dd9b 5cb9
Encontrará que su implementación web obtiene el mismo resultado cuando se le dan las "pruebas" clave.