Verschlüsselung mit RSA-Verschlüsselung in Java

Dies ist ein Beispiel für die Java-Implementierung der Verschlüsselung mit RSA-Verschlüsselung. Es werden zwei Muster implementiert: Verschlüsselung mit privatem Schlüssel → Entschlüsselung mit öffentlichem Schlüssel, Verschlüsselung mit öffentlichem Schlüssel → Entschlüsselung mit privatem Schlüssel.

import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;

import javax.crypto.Cipher;

public class Main {
	public static void main(String[] args) throws Exception {
		//Generieren Sie einen öffentlichen / privaten Schlüssel.
		KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");
		kg.initialize(1024);
		KeyPair keyPair = kg.generateKeyPair();
		KeyFactory factoty = KeyFactory.getInstance("RSA");
		RSAPublicKeySpec publicKeySpec = factoty.getKeySpec(keyPair.getPublic(), RSAPublicKeySpec.class);
		RSAPrivateKeySpec privateKeySpec = factoty.getKeySpec(keyPair.getPrivate(), RSAPrivateKeySpec.class);
		PublicKey publicKey = factoty.generatePublic(publicKeySpec);
		PrivateKey privateKey = factoty.generatePrivate(privateKeySpec);

        //Klartext
		byte[] plain = new byte[] { 0x01, 0x02 };

        //Mit einem privaten Schlüssel verschlüsseln und mit einem öffentlichen Schlüssel entschlüsseln.
		Cipher encrypterWithPrivateKey = Cipher.getInstance("RSA/ECB/PKCS1Padding");
		encrypterWithPrivateKey.init(Cipher.ENCRYPT_MODE, privateKey);
		byte[] encryptedWithPrivateKey = encrypterWithPrivateKey.doFinal(plain);
	    System.out.println("encryptedWithPrivateKey (" + encryptedWithPrivateKey.length + " bytes):");
		System.out.println(decodeHex(encryptedWithPrivateKey));

		Cipher decrypterWithPublicKey = Cipher.getInstance("RSA/ECB/PKCS1Padding");
		decrypterWithPublicKey.init(Cipher.DECRYPT_MODE, publicKey);
		byte[] decryptedWithPrivateKey = decrypterWithPublicKey.doFinal(encryptedWithPrivateKey);
	    System.out.println("decryptedWithPrivateKey (" + decryptedWithPrivateKey.length + " bytes):");
		System.out.println(decodeHex(decryptedWithPrivateKey));

		//Mit einem öffentlichen Schlüssel verschlüsseln und mit einem privaten Schlüssel entschlüsseln.
		Cipher encrypterWithPublicKey = Cipher.getInstance("RSA/ECB/PKCS1Padding");
		encrypterWithPublicKey.init(Cipher.ENCRYPT_MODE, publicKey);
		byte[] encryptedWithPublicKey = encrypterWithPublicKey.doFinal(plain);
	    System.out.println("encryptedWithPublicKey (" + encryptedWithPublicKey.length + " bytes):");
		System.out.println(decodeHex(encryptedWithPublicKey));
		
		Cipher decrypterWithPriavteKey = Cipher.getInstance("RSA/ECB/PKCS1Padding");
		decrypterWithPriavteKey.init(Cipher.DECRYPT_MODE, privateKey);
		byte[] decryptedWithPriavteKey = decrypterWithPriavteKey.doFinal(encryptedWithPublicKey);
	    System.out.println("decryptedWithPriavteKey (" + decryptedWithPriavteKey.length + " bytes):");
		System.out.println(decodeHex(decryptedWithPriavteKey));
	}

	/**Konvertieren Sie das Byte-Array in die hexadezimale Notation.*/
	public static String decodeHex(byte[] bytes) {
		StringBuilder sb = new StringBuilder();
		for (byte b : bytes) {
			sb.append(String.format("%02x", b));
		}
        return sb.toString();
	}
}

Mit [paiza.io] ausführen (https://paiza.io/projects/uu2EoByOUJunp40XAG51yg).

Recommended Posts

Verschlüsselung mit RSA-Verschlüsselung in Java
Versuchen Sie es mit RocksDB mit Java
HTTPS-Verbindung mit tls1.2 in Java 6
Ich habe versucht, JWT in Java zu verwenden
Versuchen Sie es mit der Stream-API in Java
[Java] Verwenden Sie kryptografische Technologie mit Standardbibliotheken
ERRORCODE = -4471 tritt in einer Java-Anwendung auf, die Db2 verwendet.
Versuchen Sie es mit der JSON-Format-API in Java
Lesen Sie Felica mit RC-S380 (PaSoRi) in Java
Änderungen in Java 11
Janken in Java
Umfangsrate in Java
FizzBuzz in Java
ChatWork4j für die Verwendung der ChatWork-API in Java
[Java] API-Erstellung mit Jerjey (Jax-rs) mit Eclipse
Senden Sie E-Mails mit Amazon SES SMTP in Java
Senden Sie Push-Benachrichtigungen über Notification Hubs in Java
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Passen Sie IP-Adressen mithilfe regulärer Ausdrücke in Java an
Zeigen Sie "Hello World" im Browser mit Java an
Zeigen Sie "Hello World" im Browser mit Java an
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
NLP4J Morphologische Analyse in Java (unter Verwendung von Kuromoji)
Verschlüsseln / Entschlüsseln mit AES256 in PHP und Java
Lesen Sie JSON in Java
Sortieren mit Java-Komparator
Machen Sie einen Blackjack mit Java
Konvertieren Sie JSON und YAML in Java (mit Jackson und SnakeYAML)
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Schrottpraxis mit Java ②
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
ASCII-Kunst in Java
Listen in Java vergleichen
POST JSON in Java
Schrottpraxis mit Java ①
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Fehler in Java ausdrücken
Ich habe versucht, die erweiterte for-Anweisung in Java zu verwenden