2012-02-17 23 views
8

Ho bisogno di codificare il risultato di un'esecuzione con RC4. Prima di fare lo script bash, sto testando come criptare i dati.RC4 non funziona correttamente con il comando openssl?

sto usando il comando successivo:

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

e l'uscita è:

0000000: bdb1 7f03        .... 

ora, se provo a fare lo stesso con questo encoder RC4 in linea http://www.fyneworks.com/encryption/rc4-encryption/index.asp l'output è: DA EA 54 65

Uscita diversa, con gli stessi dati e la stessa chiave ?? Dati: chiave "test": "test"

Inoltre ho controllato con un piccolo programma che ho codificato in C, e l'uscita è la stessa dell'encoder online ... quindi la domanda è, che cosa sono sto facendo male con il comando openssl ??

Grazie!

risposta

11

RC4 dispone di chiavi a lunghezza variabile e l'utilità di codifica di OpenSSL obbliga a scegliere una dimensione della chiave. Queste altre implementazioni che stai testando non rendono tale restrizione, quindi le tue chiavi non corrispondono.

Il documentation per l'utilità enc descrive le dimensioni delle chiavi consentiti per il cifrario:

rc4    128 bit RC4 
    rc4-64    64 bit RC4 
    rc4-40    40 bit RC4 

Così RC4 funziona solo su una chiave a 128 bit (16 byte). Inoltre, l'opzione -k significa derivare una chiave dalla passphrase specificata. Lo fa internamente usando la funzione EVP_BytesToKey, che implementa una funzione di derivazione chiave (KDF).

In ogni caso, per farla breve, le implementazioni RC4 non utilizzano la stessa chiave. Utilizzare l'opzione -p avere OpenSSL stampare la chiave attuale che sta usando:

$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p 
key=098F6BCD4621D373CADE4E832627B4F6 

Inoltre, dal momento che è in attesa di chiavi di 16 byte, che sarà chiavi più brevi pad zero anche se si specifica una breve chiave con il -K (maiuscolo K). È possibile utilizzare xxd per trovare i valori ASCII esadecimali di "test" e -p di nuovo per vedere la chiave di OpenSSL:

$ echo -ne "test" | xxd 
0000000: 7465 7374        test 
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p 
key=74657374000000000000000000000000 

quindi è necessario abbinare lunghezze di chiave e specificare una chiave esagonale valore con l'opzione -K e ti vedere le implementazioni RC4 sono equivalenti. Ad esempio, qui utilizzo RC-40 per limitare la lunghezza della chiave a 5 byte e utilizzare la chiave a 5 byte "test" o 74 65 73 74 73.

$ echo -ne "test" | openssl rc4-40 -K 7465737473 -nosalt -e -nopad | xxd 
0000000: dd9b 5cb9 

Troverete che l'implementazione web ottiene lo stesso risultato quando date le "prove" chiave.

Problemi correlati