RC4 funktioniert nicht korrekt mit dem Befehl openssl?

8

Ich muss das Ergebnis einer Ausführung mit RC4 kodieren. Bevor ich das Bash-Skript mache, prüfe ich, wie man die Daten verschlüsselt.

Ich benutze den nächsten Befehl:

%Vor%

Und die Ausgabe ist:

%Vor%

jetzt, wenn ich versuche, das gleiche mit diesem Online-RC4-Encoder zu tun Ссылка ist: DA EA 54 65

Unterschiedliche Ausgabe, mit den gleichen Daten und dem gleichen Schlüssel ?? Daten: "test" key: "test"

Ich habe auch mit einem kleinen Programm, das ich in C codiert habe, gecheckt, und die Ausgabe ist die gleiche wie beim Online-Encoder ... also, die Frage ist, was ich falsch mache mit dem Befehl openssl ??

Danke!

    
user1042850 17.02.2012, 14:03
quelle

1 Antwort

11

RC4 hat Schlüssel mit variabler Länge, und das OpenSSL-Dienstprogramm enc zwingt Sie, eine Schlüsselgröße auszuwählen. Diese anderen Implementierungen, gegen die Sie testen, machen keine solche Einschränkung, sodass Ihre Schlüssel nicht übereinstimmen.

Die Dokumentation für das Dienstprogramm enc beschreibt die zulässigen Schlüsselgrößen für die Chiffre:

%Vor%

So funktioniert RC4 nur auf einem 128-Bit (16-Byte) Schlüssel. Die Option -k bedeutet auch, einen Schlüssel aus der angegebenen Passphrase abzuleiten. Dies geschieht intern mithilfe der Funktion EVP_BytesToKey , die eine Schlüsselableitungsfunktion (KDF) implementiert.

>

Wie auch immer, kurz gesagt, Ihre RC4-Implementierungen verwenden nicht den gleichen Schlüssel. Verwenden Sie die Option -p , damit OpenSSL den tatsächlich verwendeten Schlüssel ausgibt:

%Vor%

Da außerdem 16-Byte-Schlüssel erwartet werden, werden auch kürzere Schlüssel zero-gepuffert, selbst wenn Sie einen kurzen Schlüssel mit der Option -K (Großbuchstabe K) angeben. Sie können xxd verwenden, um die ASCII-Hex-Werte von "test" und -p erneut zu finden, um den OpenSSL-Schlüssel zu sehen:

%Vor%

Sie müssen also die Schlüssellängen anpassen und einen Hex-Wert-Schlüssel mit der Option -K angeben. Sie werden sehen, dass die RC4-Implementierungen äquivalent sind. Z. B. verwende ich RC-40, um die Schlüssellänge auf 5 Bytes zu beschränken, und verwende den 5-Byte-Schlüssel "Tests" oder 74 65 73 74 73 .

%Vor%

Sie werden feststellen, dass Ihre Web-Implementierung dasselbe Ergebnis erhält, wenn Sie den Schlüssel "tests" erhalten.

    
indiv 17.02.2012, 20:30
quelle

Tags und Links