Maison >Java >javaDidacticiel >Cryptographie à cryptage asymétrique en Java

Cryptographie à cryptage asymétrique en Java

王林
王林avant
2023-08-19 10:25:15613parcourir

La cryptozoologie est l'étude et la pratique de différentes techniques pour protéger les communications des interférences de tiers. Il est utilisé pour la sécurité du réseau. Nous essayons de développer des méthodes et des pratiques pour protéger les données sensibles. Le seul objectif de la cryptographie est de protéger les données des attaquants. Le chiffrement asymétrique est également appelé chiffrement à clé publique/privée. La clé privée, comme son nom l’indique, restera privée, tandis que la clé publique pourra être distribuée. Le chiffrement est une relation mathématique entre deux clés, l'une pour le chiffrement et l'autre pour le déchiffrement. Par exemple, s'il y a deux clés « A1 » et « A2 », alors si la clé « A1 » est utilisée pour le chiffrement, « A2 » est utilisée pour le déchiffrement et vice versa.

Nous utilisons l'algorithme RSA pour le chiffrement asymétrique. Nous allons d'abord générer une paire de clés (clé publique, clé privée).

Cryptographie du cryptage asymétrique en Java

Pour générer une clé asymétrique, les étapes suivantes peuvent être suivies −

  • Tout d'abord, nous utilisons la classe SecureRandom pour générer les clés publiques et privées. Il est utilisé pour générer des nombres aléatoires.

  • En utilisant l'algorithme RSA pour générer des clés. Cette classe fournira la méthode getInstance() qui est utilisée pour transmettre une variable de chaîne qui signifie l'algorithme de génération de clé et elle retourne à l'objet générateur de clé

  • .
  • Initialisez l'objet générateur de clé avec une taille de clé de 2048 bits, en passant un nombre aléatoire.

  • Maintenant, la clé secrète est générée et nous voulons examiner la clé que nous pouvons convertir au format hexabinaire en utilisant DatatypeConvertor

  • .

Implémentez maintenant la méthode ci-dessus −

Syntaxe

// Java program to create a
// asymmetric key

package java_cryptography;
import java.security.KeyPair;
import java.security
	.KeyPairGenerator;
import java.security
	.SecureRandom;
import javax.xml.bind
	.DatatypeConverter;

// Class to create an asymmetric key
public class Asymmetric {

	private static final String RSA
		= "RSA";

	// Generating public and private keys
	// using RSA algorithm.
	public static KeyPair generateRSAKkeyPair()
		throws Exception
	{
		SecureRandom secureRandom
			= new SecureRandom();

		KeyPairGenerator keyPairGenerator
			= KeyPairGenerator.getInstance(RSA);

		keyPairGenerator.initialize(
			2048, secureRandom);

		return keyPairGenerator
			.generateKeyPair();
	}

	// Driver code
	public static void main(String args[])
		throws Exception
	{
		KeyPair keypair
			= generateRSAKkeyPair();

		System.out.println(
			"Public Key is: "
			+ DatatypeConverter.printHexBinary(
				keypair.getPublic().getEncoded()));

		System.out.println(
			"Private Key is: "
			+ DatatypeConverter.printHexBinary(
				keypair.getPrivate().getEncoded()));
	}
}

Sortie

<p style="color:#D2593F;"><img src="https://img.php.cn/upload/article/000/465/014/169241191890148.jpg" alt="Cryptographie à cryptage asymétrique en Java" /><b></b></p>

Vous pouvez maintenant suivre les étapes suivantes pour créer le code du programme −

  • Nous utilisons la classe de chiffrement pour créer deux modes différents : le cryptage et le déchiffrement. La clé de chiffrement est la clé privée et la clé de déchiffrement est la clé publique.

  • Appelez la méthode doFinal() sur le chiffrement, qui peut effectuer une opération en une seule partie sur les données à chiffrer/déchiffrer, ou effectuer une opération en plusieurs parties et renvoyer un tableau d'octets.

  • Enfin, nous avons obtenu le texte chiffré après avoir utilisé ENCRYPT_MODE pour le cryptage.

Programme, code

// Java program to perform the
// encryption and decryption
// using asymmetric key

package java_cryptography;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.util.Scanner;

import javax.crypto.Cipher;
import javax.xml.bind
	.DatatypeConverter;

public class Asymmetric {

	private static final String RSA
		= "RSA";
	private static Scanner sc;

	// Generating public & private keys
	// using RSA algorithm.
	public static KeyPair generateRSAKkeyPair()
		throws Exception
	{
		SecureRandom secureRandom = new SecureRandom();
		KeyPairGenerator keyPairGenerator
			= KeyPairGenerator.getInstance(RSA);

		keyPairGenerator.initialize(
			2048, secureRandom);
		return keyPairGenerator
			.generateKeyPair();
	}

	// Encryption function which converts
	// the plainText into a cipherText
	// using private Key.
	public static byte[] do_RSAEncryption(
		String plainText,
		PrivateKey privateKey)
		throws Exception
	{
		Cipher cipher = Cipher.getInstance(RSA);
		cipher.init(Cipher.ENCRYPT_MODE, privateKey);
		return cipher.doFinal(
			plainText.getBytes());
	}

	// Decryption function which converts
	// the ciphertext back to the
	// original plaintext.
	public static String do_RSADecryption(
		byte[] cipherText,
		PublicKey publicKey)
		throws Exception
	{
		Cipher cipher
			= Cipher.getInstance(RSA);

		cipher.init(Cipher.DECRYPT_MODE,
					publicKey);
		byte[] result
			= cipher.doFinal(cipherText);

		return new String(result);
	}

	// Driver code
	public static void main(String args[])
		throws Exception
	{
		KeyPair keypair
			= generateRSAKkeyPair();

		String plainText = "This is the PlainText "+ "I want to Encrypt using RSA.";

		byte[] cipherText
			= do_RSAEncryption(
				plainText,
				keypair.getPrivate());

		System.out.println(
			"The Public Key is: "
			+ DatatypeConverter.printHexBinary(
				keypair.getPublic().getEncoded()));

		System.out.println(
			"The Private Key is: "
			+ DatatypeConverter.printHexBinary(
				keypair.getPrivate().getEncoded()));

		System.out.print("The Encrypted Text is: ");

		System.out.println(
			DatatypeConverter.printHexBinary(
				cipherText));

		String decryptedText
			= do_RSADecryption(
				cipherText,
				keypair.getPublic());

		System.out.println(
			"The decrypted text is: "
			+ decryptedText);
	}
}

Sortie

<p style="text-align: center; color: rgb(210, 89, 63);"><img src="https://img.php.cn/upload/article/000/465/014/169241191871435.jpg" alt="Cryptographie à cryptage asymétrique en Java" /><b></b></p>

Conclusion

Ainsi, en utilisant l'algorithme RSA, nous avons créé le texte crypté « Ceci est le texte brut que je souhaite crypter en utilisant RSA » dans cet article

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer