2009-02-25 6 views
13

Wir haben eine Anforderung, einige Rijndael-Entwicklung in Java zu tun.Rijndael Unterstützung in Java

Irgendwelche Empfehlungen für Artikel, Bibliotheken usw., die uns helfen würden?

Gibt es Hinweise auf die Keystore-Wartung und wie werden die Schlüssel sicher gespeichert?

Edit:

Es müßte Open-Source sein. Im Wesentlichen ist es nur Standard-Verschlüsselung/Entschlüsselung von Daten mit Rijndael.

+0

Rijndael == AES – lImbus

Antwort

21

Java enthält AES out of the box. Rijndael ist AES. Sie benötigen keine externen Bibliotheken. Sie brauchen nur so etwas:

byte[] sessionKey = null; //Where you get this from is beyond the scope of this post 
byte[] iv = null ; //Ditto 
byte[] plaintext = null; //Whatever you want to encrypt/decrypt 
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
//You can use ENCRYPT_MODE or DECRYPT_MODE 
cipher.calling init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKey, "AES"), new IvParameterSpec(iv)); 
byte[] ciphertext = cipher.doFinal(plaintext); 

Und das ist es, für die Verschlüsselung/Entschlüsselung. Wenn Sie große Datenmengen verarbeiten, lesen Sie besser Chunks, die ein Vielfaches von 16 Byte sind, und rufen anstelle von doFinal update auf (Sie rufen nur doFinal für den letzten Block auf).

+7

Rijndael ist nicht gleich AES, sondern AES mit einigen Einschränkungen - feste Blockgröße von 128 Bit, und einige Krypto-Modi nicht unterstützt. Jede vollständige AES-Implementierung sollte als Rijndael verwendbar sein. – Cheeso

+14

Dies ist genau das Gegenteil, AES ist eine Untergruppe von Rijndael –

+3

@ BrunoRohée ist richtig. AES ist eine Teilmenge von Rijndael, überprüfen Sie diese http://stackoverflow.com/questions/748622/differences-between-rijndael-and-aes – tony9099

1

javax.crypto hat AES-Unterstützung: http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html

Wie für den sicheren Schlüsselspeicher, ist die übliche Methode ist, einen Verschlüsselungsschlüssel von der Benutzereingabe (ein Passwort) unter Verwendung einer kryptographischen Hash-Funktion abzuleiten, und Verwenden der abgeleiteten Schlüssel zu verschlüsseln Sie den Schlüsselbund. Oder wenn Sie nur einen Schlüssel benötigen, können Sie den abgeleiteten Schlüssel selbst verwenden.

Denken Sie immer daran, dass die Sicherheit des Systems direkt von der Stärke der verwendeten Hash-Funktion abhängt. Verwenden Sie eine kryptografisch sichere Hash-Funktion, zusammen mit einem Salz, wenn möglich, und hasen Sie mehr als einmal (z. B. Hunderte Male).

Das gesagt, die Frage ist sehr vage.

+0

es ist auch erwähnenswert, dass 'javax.crypto' eine sehr optimierte Version von AES verwendet und ziemlich schnell ist. – tony9099

5

Für eine große kostenlose Bibliothek, empfehle ich dringend BouncyCastle. Es ist aktiv gepflegt, hohe Qualität und hat eine schöne Reihe von Codebeispielen. Für die Referenzdokumentation müssen Sie sich mehr auf die allgemeine JCE docs.

verlassen Ich kann nicht sagen, welche Bibliothek wir verwenden, um FIPS-Zertifizierungsanforderungen zu erfüllen. Aber es gibt Alternativen zu CryptoJ, die viel, viel billiger sind.

Im Allgemeinen würde ich empfehlen, einen neuen Schlüssel für jede Nachricht zu generieren, die Sie mit einer symmetrischen Chiffre wie Rijndael verschlüsseln, und dann diesen Schlüssel mit einem asymmetrischen Algorithmus wie RSA zu verschlüsseln. Diese privaten Schlüssel können in einem passwortgeschützten, softwarebasierten Schlüsselspeicher wie PKCS # 12 oder Java's "JKS" gespeichert werden, oder, zur besseren Sicherheit, auf einem "Chipkarten" -Hardware-Token oder einem anderen Krypto-Hardwaremodul.

3

Wie meine Firma kürzlich herausgefunden hat, ist AES nicht ganz Rijndael. AES hat die Beschränkung, dass Schlüssel 128, 192 oder 256 Bit sein müssen - Rijndael erlaubt jedoch auch Schlüssel, die 160 und 224 sind.

Wie oben erwähnt, bietet BouncyCastle ein Rijndael-Objekt, das die zusätzlichen Schlüssellängen unterstützt: 128/160/192/224/256 Bits. Schauen Sie sich speziell die Lightweight-API an.

Gnu-crypto ist eine weitere Open-Source-Bibliothek - sie bietet jedoch KEINE Unterstützung für 160- und 224-Bit-Schlüssel.

Also, wenn Sie speziell für volle Rijndael Unterstützung suchen, dann ist BouncyCastle der einzige, den ich bisher gefunden habe.

+1

Wenn Sie das Java für Android-Entwicklung verwenden müssen (obwohl die Frage nicht besagt, dass es Wert ist, dass Bounty Castle hat jetzt einen Bruder, gibt das mehr Flexibilität auf Android als Spongy Castle bekannt, die eine Ableitung ist .. und eigentlich ziemlich gut) – tony9099

Verwandte Themen