2012-02-17 17 views
8

Necesito codificar el resultado de una ejecución con RC4. Antes de hacer el script bash, estoy probando cómo criptar los datos.RC4 no funciona correctamente con el comando openssl?

estoy usando el siguiente comando:

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

y la salida es:

0000000: bdb1 7f03        .... 

Ahora, si yo trato de hacer lo mismo con este codificador RC4 línea http://www.fyneworks.com/encryption/rc4-encryption/index.asp la salida es: DA EA 54 65

Salida diferente, con los mismos datos y la misma clave ?? Datos: tecla "prueba": "prueba"

También he comprobado con un pequeño programa que he codificado en C, y la salida es la misma que el codificador en línea ... entonces, la pregunta es, ¿qué es lo que hago? Estoy haciendo mal con el comando openssl?

Gracias!

Respuesta

11

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.

Cuestiones relacionadas