Frage

Ich habe eine Nachricht in einem byte [], verschlüsselt mit "RSA / EZB / PKCS1Padding" enthalten habe. Zum Entschlüsseln es mir eine Cipher c und initiieren sie mit

c = Cipher.getInstance("RSA/ECB/PKCS1Padding");

Untill jetzt habe ich entschlüsselte nur kleine Nachrichten, mit der doFinal () Methode, Rückkehr ein byte [] mit dem entschlüsselten Bytes.

c.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptetBytes = c.doFinal(encryptedBytes);

Aber in diesem Fall sind die Daten größer (ca. 500 Bytes) und die doFinal () -Methode löst eine Ausnahme (javax.crypto.IllegalBlockSizeException: Daten dürfen nicht länger als 128 Byte) . Ich denke, ich brauche das update () verwenden - Methode, aber ich kann nicht herausfinden, wie es zu bekommen richtig zu arbeiten. Wie wird das gemacht?

War es hilfreich?

Lösung

Ich denke, mit RSA-Verschlüsselung für alles andere als Schlüssel Transportmissbrauch ist.

Erstellen Sie einen neuen Schlüssel für eine symmetrische Verschlüsselung und verschlüsseln Sie Ihre Bulk-Daten mit diesem. Dann verschlüsseln, den Schlüssel mit RSA. Senden Sie die symmetrisch verschlüsselte Chiffretext zusammen mit dem asymmetrisch verschlüsselten Inhaltsverschlüsselungsschlüssel an den Empfänger.

Andere Tipps

Mit RSA können Sie nur Verschlüsseln / Entschlüsseln von Block mit einer Größe auf Ihre Schlüssellänge minus padding Länge auf. Wenn Sie die Daten länger als Ihr Schlüssel vielleicht ist es gerade in einem Array zusammengefügt, so dass Sie sie in Stücke mit einer Größe von Ihren Schlüssel aufgeteilt werden soll (128 Byte schlägt 1024 Schlüssel ohne Polsterung, ich bin nicht sicher, ob es möglich ist). Verwenden von update () ist hier nicht der Fall.

Einfach, müssen Sie wissen, wie das Array erstellt wurde.

Im Allgemeinen RSA sollte nicht verwendet werden, um große Menge an Daten zu verschlüsseln, da es ziemlich Zeit verbrauchen. Sollte verwendet werden Schlüssel zur symmetrischen Chiffre zu verschlüsseln, wie AES.

Werfen Sie einen Blick hier: https://www.owasp.org/index.php/Digital_Signature_Implementation_in_Java

Wie Erickson sagte:

Die Schritte sollten Sie verschlüsseln nehmen sind:

  1. Generieren RSA-Schlüsselpaar (oder die öffentlichen Schlüssel von einem Schlüsselspeicher abrufen)
  2. Generieren Symmetrische Schlüssel (AES)
  3. Verschlüsseln von Daten mit AES-Schlüssel
  4. Verschlüsseln AES-Schlüssel mit dem öffentlichen RSA-Schlüssel
  5. Store (oder Person mit einem privaten Schlüssel senden) dem verschlüsselten AES-Schlüssel und die AES verschlüsselte Daten

Zum Entschlüsseln:

  1. mit diesem Schlüsselpaar zugehörige private Schlüssel Gewöhnen verschlüsseln
  2. Entschlüsseln AES-Schlüssel mit einem privaten Schlüssel
  3. Entschlüsseln von Daten mit AES-Schlüssel
  4. Verwenden Sie Daten
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top