Chiffrer à l'aide du chiffrement RSA en Java

Ceci est un exemple d'implémentation Java de cryptage avec cryptage RSA. Deux modèles sont implémentés: cryptage avec clé privée → décryptage avec clé publique, cryptage avec clé publique → décryptage avec clé privée.

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 {
		//Générez une clé publique / privée.
		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);

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

        //Cryptez avec une clé privée et décryptez avec une clé publique.
		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));

		//Cryptez avec une clé publique et décryptez avec une clé privée.
		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));
	}

	/**Convertit le tableau d'octets en notation hexadécimale.*/
	public static String decodeHex(byte[] bytes) {
		StringBuilder sb = new StringBuilder();
		for (byte b : bytes) {
			sb.append(String.format("%02x", b));
		}
        return sb.toString();
	}
}

Exécutez avec paiza.io.

Recommended Posts

Chiffrer à l'aide du chiffrement RSA en Java
Essayez d'utiliser RocksDB avec Java
Connexion HTTPS utilisant tls1.2 dans Java 6
J'ai essayé d'utiliser JWT en Java
Essayez d'utiliser l'API Stream en Java
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
ERRORCODE = -4471 se produit dans une application Java qui utilise Db2.
Essayez d'utiliser l'API au format JSON en Java
Lire Felica en utilisant RC-S380 (PaSoRi) en Java
Changements dans Java 11
Janken à Java
Taux circonférentiel à Java
FizzBuzz en Java
ChatWork4j pour l'utilisation de l'API ChatWork en Java
[Java] Création d'API à l'aide de Jerjey (Jax-rs) avec eclipse
Envoyer des e-mails à l'aide d'Amazon SES SMTP en Java
Envoyer des notifications push à l'aide de Notification Hubs en Java
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser l'API Cloud Vision de GCP en Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Faire correspondre les adresses IP à l'aide d'expressions régulières en Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
NLP4J [001b] Analyse morphologique en Java (utilisant kuromoji)
Crypter / décrypter avec AES256 en PHP et Java
Lire JSON en Java
Tri à l'aide du comparateur java
Faites un blackjack avec Java
Convertir JSON et YAML en Java (en utilisant Jackson et SnakeYAML)
Programmation par contraintes en Java
Mettez java8 dans centos7
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Simple htmlspecialchars en Java
Pratique de grattage avec Java ②
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Pratique du grattage avec Java ①
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Exprimer l'échec en Java
J'ai essayé d'utiliser l'instruction Extended for en Java