10

Nachdem ich Artikel über Kryptografie (symmetrische und asymmetrische) Methoden gelesen haben. Viele Artikel sagen, dass private Schlüssel zum Verschlüsseln und Entschlüsseln von Daten verwendet wird. Öffentlicher Schlüssel wird verwendet, um Daten zu verschlüsseln Ich versuche mit der Implementierung in Java zu beginnen. Ich kann keinen privaten Schlüssel zum Verschlüsseln und Entschlüsseln von Daten verwenden (ich verwende den RSA-Algorithmus). Wenn es möglich ist, bitte geben Sie mir einen Link. Wenn es nicht unterstützt, bitte beantworten Sie, warum es nicht unterstützt?Verschlüsselung und Entschlüsselung mit privatem Schlüssel in Java

// Encrypt

Cipher encrypt=Cipher.getInstance("RSA"); 
encrypt.init(Cipher.ENCRYPT_MODE, privatekey); 
byte[] encryptedMessage=encrypt.doFinal(msg.getBytes()); 

// Decrypt

Cipher decrypt=Cipher.getInstance("RSA"); 
decrypt.init(Cipher.DECRYPT_MODE, privateKey); 
byte[] decryptedMessage=decrypt.doFinal(encryptedMessage); 

Antwort

4

Wie Public Private Key Encryption arbeitet:

  1. , wenn Sie etwas mit Ihrem privaten Schlüssel jemand mit Ihrem verschlüsseln öffentlicher Schlüssel kann es entschlüsseln. Wenn Sie etwas mit Ihrem öffentlichen Schlüssel verschlüsseln, kann nur Ihr privater Schlüssel ihn entschlüsseln.

Sie müssen öffentliches privates Schlüsselpaar generieren. Der private Schlüssel ist nur für Sie und der öffentliche Schlüssel kann Personen gegeben werden, denen Sie vertrauen.

Wie Schlüsselpaare generieren?

$ openssl genrsa -out private_key.pem 1024 
$ openssl rsa -pubout -in private_key.pem -out public_key.pem 

Oder gehen Sie hier in tut es in Java ->JAVA RSA Wenn Sie, dass Sie zurückkommen und mehr Fragen

-3

Symmetrische Schlüssel hat einen einzigen Schlüssel fragen, die sowohl zum Verschlüsseln und Entschlüsseln verwendet wird. Dies ist ein geheimer Schlüssel, der manchmal auch privater Schlüssel zwischen Sender und Empfänger genannt wird

Kryptografie mit öffentlichem Schlüssel hat 2 Schlüssel, privat und öffentlich Wenn Sie mit einem verschlüsseln, können Sie mit dem anderen entschlüsseln. - Wenn Sie einen privaten Schlüssel verwenden, um eine Nachricht zu verschlüsseln, kann sie jeder mit Ihrem öffentlichen Schlüssel entschlüsseln. Dies ist ein Fall, in dem Sie Ihr Dokument authentifizieren und andere überprüfen, ob Sie Ihren öffentlichen Schlüssel verwenden. - Wenn Sie eine verschlüsselte Nachricht an jemanden senden möchten, müssen Sie die Nachricht mit seinem öffentlichen Schlüssel senden. In diesem Fall kann die Nachricht nur mit dem privaten Schlüssel entschlüsselt werden, den nur dieser hat.

So in Public-Key-Kryptographie RSA wo Sie 1 Öffentlichkeit und 1 private Schlüssel und u müssen mit einer verschlüsseln und mit einem anderen entschlüsseln, während in symmetrischer Kryptographie AES,DES Sie nur 1 geheime private Schlüssel haben, die verwendet wird, um sowohl zu Verschlüsseln und Entschlüsseln .

13

Um die RSA-Verschlüsselung durchzuführen, müssen Sie mit dem öffentlichen Schlüssel verschlüsseln und mit dem privaten Schlüssel entschlüsseln. Darüber hinaus sollten Sie eine wohldefinierte Padding-Methode, wie PKCS # 1 v1.5 kompatibles Padding oder - wenn verfügbar - OAEP Padding verwenden.

Die Verschlüsselung mit einem privaten RSA-Schlüssel ist nicht sinnvoll, da jeder mit dem öffentlichen Schlüssel entschlüsseln kann. Es gibt etwas, das "rohe RSA" genannt wird, was im Grunde modulare Potenzierung ist, aber das sollte nur mit einem anderen Padding-Schema verwendet werden, um Signaturen zu erzeugen. In diesem Fall möchten Sie, dass jeder mit einem öffentlichen Schlüssel die Signatur "entschlüsselt".

Weitere Informationen here und here.

So Verschlüsselung ist:

// specify mode and padding instead of relying on defaults (use OAEP if available!) 
Cipher encrypt=Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
// init with the *public key*! 
encrypt.init(Cipher.ENCRYPT_MODE, publicKey); 
// encrypt with known character encoding, you should probably use hybrid cryptography instead 
byte[] encryptedMessage = encrypt.doFinal(msg.getBytes(StandardCharsets.UTF_8)); 

und Entschlüsselung ist:

Cipher decrypt=Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
decrypt.init(Cipher.DECRYPT_MODE, privateKey); 
String decryptedMessage = new String(decrypt.doFinal(encryptedMessage), StandardCharsets.UTF_8); 
+0

Ist keine Verschlüsselungs Unterzeichnung Verschlüsselung mit einem privaten Schlüssel? –

+2

@PeterBecker Es ist besser, nicht so zu denken. Überprüfen Sie [RFC 3447 Teil 5.2] (http://tools.ietf.org/html/rfc3447#page-12): "... Die wichtigste mathematische Operation in jedem Grundelement ist Exponentiation, wie in der Verschlüsselung und Entschlüsselung Primitiven von Abschnitt 5.1 RSASP1 und RSAVP1 sind die gleichen wie RSADP und RSAEP mit Ausnahme der Namen ihrer Eingabe- und Ausgabeargumente, sie werden unterschieden, da sie für verschiedene Zwecke bestimmt sind. ". Dies gilt nur für "Lehrbuch" oder "rohe" RSA, die nicht für normale kryptografische Zwecke geeignet sind. Die Polsterung ist ein integraler Bestandteil des Schemas und unterscheidet sich. –

+0

Punkt genommen. Ich habe tatsächlich einmal ein gebrochenes Krypto-Schema gefunden, bei dem reines RSA verwendet wurde (Problem 1) und die beiden Schlüssel falsch herum verwendet wurden. Bouncy Castle lässt dich das machen und ändert dann leise das Padding, was in diesem Fall keine Randomisierung bei der Verschlüsselung bedeutet. –