So erzeugen Sie den geheimen Schlüssel in Java einmal und verwenden Sie diesen Schlüssel in 2 verschiedenen Programmen
Mein Ziel ist es, schreiben Sie ein Java-Programm zum verschlüsseln einer Textdatei (cipher text
) mit AES algorithm
. Und dann schreiben Sie ein weiteres Programm zum entschlüsseln dieser verschlüsselten Datei ( cipher text
), um den Klartext zurück. Ich möchte mit dem gleichen Schlüssel (gleiche Schlüssel, generieren ein mal, speichern Sie es irgendwo, und verwenden Sie es in der ver-und Entschlüsselung-Programm) für die Verschlüsselung und Entschlüsselung Prozess. Wenn ich Schlüssel generieren und die Verschlüsselung und Entschlüsselung Zeile für Zeile in das gleiche Programm, dann funktioniert es tadellos. Hier ist der funktionierende code-snippet:
String strDataToEncrypt = new String();
String strCipherText = new String();
String strDecryptedText = new String();
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE,secretKey);
strDataToEncrypt = "any text input";
byte[] byteDataToEncrypt = strDataToEncrypt.getBytes();
byte[] byteCipherText = aesCipher.doFinal(byteDataToEncrypt);
strCipherText = new BASE64Encoder().encode(byteCipherText);
System.out.println("cipher text: " +strCipherText);
aesCipher.init(Cipher.DECRYPT_MODE,secretKey,aesCipher.getParameters());
byte[] byteDecryptedText = aesCipher.doFinal(new BASE64Decoder().decodeBuffer(strCipherText));
strDecryptedText = new String(byteDecryptedText);
System.out.println("plain text again: " +strDecryptedText);
Aber, ich brauche auch zwei verschiedene Programme (java-Dateien) für die Verschlüsselung und die Entschlüsselung. Also, ich habe irgendwie einen Schlüssel erzeugen und speichern Sie irgendwo. Dann verwenden Sie den gleichen Schlüssel für die Verschlüsselung und Entschlüsselung Programm. Wie kann ich das tun?
EDIT_1
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
byte[] encoded = secretKey.getEncoded();
System.out.println("key: "+encoded);//key: [B@52b2a2d8
Ich kann das codierte Schlüssel-Wert mit dem oben genannten Programm. Aber meine Frage ist, wie zu generieren der SecretKey mit diesem Wert in meiner Entschlüsselung Programm?
schauen Sie bitte auf meinen edit.
Der Schlüssel ist ein
byte[]
für die das system verwendet Object#toString()
, die nur schreibt sich die innere Identität. Sie müssen schreiben Sie die einzelnen byte Werte in eine Datei, vielleicht ist die Konvertierung in hex-ersten.InformationsquelleAutor K M Rakibul Islam | 2013-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mir verzeihen, wenn ich deine Frage missverstanden, aber ich glaube, Sie wollen zu rekonstruieren
SecretKey
- Objekt aus einem vorhandenen Schlüssel codiert in einem byte-array.Dies kann durchgeführt werden, indem einfach die
javax.crypto.spec.SecretKeySpec
's Konstruktor als solche:Seit
SecretKeySpec
ist eine Unterklasse vonSecretKey
kein casting erforderlich ist. Sollten Sie Ihre Verschlüsselung/decrption Algorithmus ändern bitte ändern Sie den string-literal verwendet im KonstruktorAES
zu was auch immer-Algorithmus, die Sie beschlossen, in der Zukunft zu verwenden.InformationsquelleAutor initramfs
Hier eine Möglichkeit zum ausdrucken der Werte in einer
byte[]
array in hex:Wenn Sie
Arrays.toString(byte[])
Sie gehen durch eine byte-zu-Zeichen-encoding-Konvertierung, die möglicherweise nicht reversibel ist.Arrays.toString(byte[])
definiert ist, zu produzieren eine standard-Darstellung des array zurück, das ist sehr unwahrscheinlich, dass zu ändern. Aber ich Stimme zu, dass es sich definitiv nicht ideal für diesen Zweck. @KeenLearner Betrachten hex oder Base64-Codierung, wenn Sie brauchen, um stellen Sie den Schlüssel in ASCII, und beachten Sie, dass Dateien können die binäre Daten enthalten.InformationsquelleAutor Jim Garrison