junghansmega Geschrieben 4. September 2008 Geschrieben 4. September 2008 Hallo zusammen, ein paar generelle Fragen zur asymetrischen Verschlüsselung mit Java: Ist es korrekt, dass 1) was mit dem privatekey verschlüsselt wurde, nur mir dem publickey entschlüsselt werden kann? 2) was mit dem publickey verschlüsselt wurde, nur mir dem privatekey entschlüsselt werden kann? (wie oben, nur andersherum) Ich habe mich bis zu folgendem Beispiel vorgearbeitet: import java.security.KeyPairGenerator; import java.security.KeyPair; import java.security.PublicKey; import java.security.PrivateKey; import javax.crypto.Cipher; public class ASymCipher { private static byte[] encrypt(byte[] inpBytes, PublicKey key, String xform) throws Exception { Cipher cipher = Cipher.getInstance(xform); cipher.init(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(inpBytes); } private static byte[] decrypt(byte[] inpBytes, PrivateKey key, String xform) throws Exception{ Cipher cipher = Cipher.getInstance(xform); cipher.init(Cipher.DECRYPT_MODE, key); return cipher.doFinal(inpBytes); } public static void main(String[] unused) throws Exception { String xform = "RSA"; // schlüsselpaar basteln KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024); // das ist die keysize. KeyPair kp = kpg.generateKeyPair(); PublicKey pubk = kp.getPublic(); PrivateKey prvk = kp.getPrivate(); String s = "Turning and turning in the widening gyre, the falcon cannot hear the falconer"; byte[] dataBytes =s.getBytes(); byte[] encBytes = encrypt(dataBytes, pubk, xform); byte[] decBytes = decrypt(encBytes, prvk, xform); // verschlüsselten String ausgeben System.out.println(decBytes); boolean expected = java.util.Arrays.equals(dataBytes, decBytes); System.out.println("Test " + (expected ? "SUCCEEDED!" : "FAILED!")); } } Ausgabe: [B@1b10d42 Test SUCCEEDED! Kann das sein? Der zu verschlüsselnde String ist um ein Vielfaches länger als die verschlüsselte Version... (gehen da nicht Informationen verloren?) Wenn die Verschlüsselte Version so kurz ist, würde es sich ja beinahe lohnen, einfach alle Strings der Länge 10 durchzuprobieren.... Ausserdem: wenn ich einen längeren String als 117 bytes verschlüsseln möchte, bekomme ich folgendes: Exception in thread "main" javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes at com.sun.crypto.provider.RSACipher.a(DashoA13*..) at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..) at javax.crypto.Cipher.doFinal(DashoA13*..) at ASymCipher.encrypt(ASymCipher.java:14) at ASymCipher.main(ASymCipher.java:46) Wie kann ich längere Strings verschlüsseln? Dank im Voraus Zitieren
Guybrush Threepwood Geschrieben 4. September 2008 Geschrieben 4. September 2008 Ist es korrekt, dass 1) was mit dem privatekey verschlüsselt wurde, nur mir dem publickey entschlüsselt werden kann? 2) was mit dem publickey verschlüsselt wurde, nur mir dem privatekey entschlüsselt werden kann? (wie oben, nur andersherum) Nein Punkt 1 ist falsch. Normalerweise läuft das so das du einen Privaten und einen Öffentlichen Schlüssel hast. Den Öffentlichen kannst du dann beliebig verteilen und wenn jemand etwas damit verschlüsselt dann kann das nur mit dme privaten Schlüssel wieder entschlüsselt werden. Gleichzeitig kannst du den privaten Schlüssel noch dazu verwenden um etwas zu signieren. Das heißt jeder der den öffentlichen Schlüssel hat kann feststellen das das (zum Beispiel die EMail) von dir kommt weil nur du den privaten Schlüssel hast. Wenn du mit dem privaten Schlüssel etwas verschlüsselst dann kann das nicht merh entschlüsselt werden bzw. hast du keinen Schlüssel dafür. Zitieren
junghansmega Geschrieben 4. September 2008 Autor Geschrieben 4. September 2008 Aber eine Signatur ist doch nichts anderes als ein Hash, der mit dem privatekey verschlüsselt wurde, und nur mit dem public key geprüft (d.h. entschlüsselt werden kann). Zitieren
Guybrush Threepwood Geschrieben 5. September 2008 Geschrieben 5. September 2008 hmm ja stimmt du hast Recht, das hab ich verwechselt. Du solltest das aber nicht in diese Richtung betreiben weil du ja nicht sicher sein kannst wer alles den öffentlichen Schlüssel hat. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.