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.