Java-AES-Verschlüsselung mit Salz
Okay, stellt sich heraus, ich zu saugen Verschlüsselung/Entschlüsselung. I just dont get it.
Wie kann ich Java verschlüsseln String message1 = "hello world";
mit String salt = "mySalt";
mit AES-Verschlüsselung? auch wie kann ich ihn entschlüsseln, sobald verschlüsselt?
Wenn Sie die Zeit haben, bieten die basic-code, es würde mir helfen, eine Menge.
Auch 1 Allgemeine Frage über die AES-Verschlüsselung mit dem gleichen Salz, wird die gleiche Nachricht immer die selbe Verschlüsselung?
Vielen Dank im Voraus.
- mögliche Duplikate von Java-256-bit-AES-Verschlüsselung
- Etwas sagt mir, man sollte wohl nicht versuchen, Sie zu implementieren alle wichtigen software, bis Sie sind viel mehr zu Hause mit der Kryptographie. AES ist nur eine Chiffre, müssen Sie noch wählen Sie einen Modus, und einen Schlüssel und einen Initialisierungsvektor Schema. Salze haben nicht wirklich etwas zu tun mit Verschlüsselung (eher mit hashing).
- Thilo, sah ich, dass der Artikel, den ich leider nicht verstehen konnte ist alles drin :S Kerrek SB, ich weiß, ich bin nur für mein eigenes wissen, Erfahrung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
AES nicht das Konzept Salz. Es braucht nur die Daten und einen Schlüssel. Für die gleiche Eingabe, es wird immer erzeugen die gleiche Ausgabe.
Wie kombinieren Sie Ihre Nachricht mit Ihrem Salz ist bis zu Ihnen. Die String-Verkettung ist wahrscheinlich ausreichend. Aber beachten Sie, dass die Salze nicht wirklich viel Sinn machen, für so etwas wie AES, weil es nicht ein hash-Algorithmus.
Immer Salz Ihr AES-Dateien. Der Grund für dieses ist, sagen Sie ein Verzeichnis mit JPEG-Dateien cipher verschlüsselt mit dem gleichen Passwort, aber nicht über ein Salz. Wenn jemand bekommt halt die Dateien, die Sie werden sehen, alle Dateien beginnen mit der gleichen bytes (das ist die JPEG-header und dem gleichen Passwort wird immer verschlüsselt, um die gleichen Werte, bis die bytes beginnen zu unterscheiden, zumindest mit einem CBC), werden Sie auch wissen, was die ersten Blöcke der Datei Aussehen wird, unverschlüsselt. Auch wenn Sie nicht wissen, welche Art von Dateien Sie sind, Sie können wahrscheinlich erraten, der Typ von der Länge des lead-in, die ähnlich sind und die verschiedenen Datei-Formate gibt.
Wissen das, können Sie reverse engineer Sie Ihr Kennwort in einer ähnlichen Weise wie die rainbow-Tabellen/brute-force. Das Salzen wird nicht aufhören, dies geschieht, aber Sie machen es wirklich schwer zu knacken als jede Datei (nach dem Salz) wird anders sein, so dass der Datei-Typ-Identifikation ist schwierig, und Sie hätte zu erzeugen rainbow-Tabelle für jedes Salz oder der rechnerische Mehraufwand für die Erstellung einer Initialisierungs-Vektor für das Salz.
OpenSSL speichert das Salz in der Datei
z.B. ich habe eine Datei mit diesem Befehl mit dem Kennwort 'password':
echo "randomprhase" | openssl aes-128-cbc -Nachricht.enc
Hier der hexdump der resultierenden Datei:-
Und die gleichen Daten, wenn ich lief die Verschlüsselung wieder:-
Den ersten 4 bytes sagen, dass die Datei gesalzen (6153 746c 6465 5f5f) und immer das gleiche.
Den nächsten 4 bytes wird die random-Salz (7eaa c4fd 63d8 8c8 für die erste Datei & a876 5394 53f1 bf1a für die zweite Datei)
OpenSSL wird, nehmen diese Salz-und bauen Sie den Initialisierungs-Vektor (IV), wird ein MD5-hash von Passwort + salt 3 mal wiederholt. Dieser IV wird dann zum verschlüsseln der Datei verwendet.
Beachten Sie die Nutzlast, die letzten 8 bytes in jedem Fall anders ist.
Wenn wir liefen den gleichen Befehl während nicht Salzen:
[james@web openssltest]$ echo "randomprhase" | openssl aes-128-cbc -nosalt -out nosalt.enc
[james@web openssltest]$ echo "randomprhase" | openssl aes-128-cbc -nosalt -out nosalt1.enc
Beachten Sie, dass, wenn ich wiederholte es mit dem gleichen Passwort angegeben und nicht, um Salz der Nutzdaten identisch sind.
In einer Java-implementation können Sie Ihre Salz separat, aber lohnt sich Ihre Zeit, etwas zu schreiben, dass emuliert die OpenSSL-Implementierung, so dass Sie nicht haben, um verlassen sich auf Ihren eigenen code erstellen, um eine Datei zu entschlüsseln (vor allem, wenn Sie verlieren, Ihren code irgendwann in der Zukunft, kann die Verschlüsselung vereiteln Sie so viel wie möglich vereiteln Angreifer).
Mit Spring Security, Crypto, es wird vereinfacht (vor allem, weil Sie standardmäßig auf die Passwort-basierte Verschlüsselung eher als andere Formen):
AES ist nur eine Chiffre, und Sie können eine IV mit dem text, den Sie verschlüsseln.
Mit der symmetrischen Verschlüsselung, das Salz wird verwendet für den Schlüssel/Geheimnis, dass Sie verschlüsseln mit, wie Sie oben sehen können.
In der realen Welt haben Sie Umgang mit verteilten Systemen, shared keys und Salze über den cluster, etc, etc. Viel Spaß.
Spring Security ist eine dünne Abstraktion über JCE, so ist es einfach zu anzupassen, wenn Sie nicht Quelle selbst.
Wenn du AES mit einem salt-Wert, Salz-Wert unterscheidet sich von dem text zu verschlüsseln - aber der key bleibt der gleiche - in diesem Fall müssen Sie auch zu speichern, den salt-Wert als auch..
Hier ist ein gutes Beispiel...