Zum Inhalt springen

RSA Verschlüsselungs Fragen.


junghansmega

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...