Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

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).

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.