2008-09-08 6 views
5

Ich muss einige vertrauliche Daten durch Verschlüsselung mit mindestens 128 Bit-Schlüssel speichern. Ich untersuchte das Paket javax.crypto und fand heraus, dass es bestimmte Cipher-Namen gibt, wie PBEWithMD5AndDES oder PBEWithSHA1AndDESede, die eine Verschlüsselung bis 56 Bit und 80 Bit (http://en.wikipedia.org/wiki/DESede) ermöglichen.128-Bit-Datenverschlüsselung mit Java

Ich bezog andere Kerle Beiträge aber diese sind hauptsächlich mit RSA und in meinem Verständnis RSA ist allgemein geeignet für die Verschlüsselung der Kommunikationsdaten (mit privat-öffentlichen Schlüsselpaar). Mein Bedarf ist anders, ich möchte nur die Daten speichern und sie durch Entschlüsseln zurückholen. Daher brauche ich keine privaten-öffentlichen Schlüsselpaare.

Bitte lassen Sie mich wissen, wenn Sie eine Ahnung davon haben.

Antwort

8

Verwenden Sie Advanced Encryption Standard (AES). Es unterstützt Schlüssellängen von 128, 192 oder 256 Bit.

Die algorithm ist einfach. Die Sun Java Website hat eine section explaining how to do AES Verschlüsselung in Java.

aus Wikipedia ...

... Advanced Encryption Standard (AES), auch als Rijndael bekannt, ist eine Blockchiffre als Verschlüsselungsstandard der US-Regierung angenommen. Es wurde ausführlich analysiert und jetzt weltweit verwendet wird, wie es der Fall mit seinem Vorgänger, dem Data Encryption Standard (DES) ...

So als Faustregel gilt: Sie sind nicht anzunehmen Verwenden Sie DES oder seine Varianten, weil es ausläuft.

Ab sofort ist es besser, AES zu verwenden. Es gibt andere Optionen wie Twofish, Blowfish usw. auch. Beachten Sie, dass Twofish als erweiterte Version von Blowfish angesehen werden kann.

3

Sie müssen die unbegrenzt starke JCE-Richtliniendatei für Ihr JDK herunterladen und installieren. Für JDK 6 ist es auf http://java.sun.com/javase/downloads/index.jsp ganz unten.

+0

Ist es nicht nur erforderlich, für AES-192 oder 256? Ich glaube, dass AES-128 die JCE-Richtliniendateien mit unbegrenzter Stärke nicht benötigt. – halluc1nati0n

0

Ich bin kein Kryptoexperte (also nehmen Sie diesen Vorschlag mit einem Körnchen Salz), aber ich habe Blowfish vorher verwendet, und ich denke, dass Sie es für das verwenden können, was Sie brauchen. Es gibt auch einen neueren Algorithmus desselben Typs namens Twofish.

Hier ist ein website with a Java implementation, aber seien Sie vorsichtig mit der Lizenz (es heißt kostenlos für nicht-kommerzielle Nutzung). Sie können diesen Link auch von Bruce Schneier's website (dem Ersteller beider Algorithmen) finden.

+0

der Link in "Website mit Java-Implementierung" ist tot. plz update es ... – vettipayyan

2

Kombinieren 3 verschiedene Antworten gibt, was ich denke, ist die richtige Antwort.

Laden Sie Verschlüsselungsbibliotheken von Bouncycastle herunter, dann müssen Sie die "Unlimited Strength Jurisdiction Policy" von Oracle herunterladen (die Dateien befinden sich am Ende der Download-Seite). Stellen Sie sicher, dass Sie die Readme-Datei zur Installation lesen.

Sobald Sie dies getan haben und den Beispielcode aus dem Bountycastle-Paket verwenden, sollten Sie in der Lage sein, Ihre Daten zu verschlüsseln. Sie können mit einer Dreifach-DES-Implementierung gehen, die Ihnen einen 112-Bit-Schlüssel gibt (oft als 128 Bit bezeichnet, aber nur 112 von ihnen sind tatsächlich sicher), oder wie bereits erwähnt, können Sie AES verwenden. Mein Geld wäre auf AES.

+0

Heads Up: Es ist BounCycastle, nicht BounTycastle – lImbus

0

Dank Michael, nachdem ich viele Dinge in JCE ausprobiert hatte, entschied ich mich endlich für Bouncycastle.

JCE unterstützt AES für die Verschlüsselung und PBE für die kennwortbasierte Verschlüsselung, unterstützt jedoch keine Kombination von beiden. Ich wollte das Gleiche und das fand ich in Bouncycastle.

Das Beispiel ist: http://forums.sun.com/thread.jspa?messageID=4164916