Rumah >Java >javaTutorial >Kriptografi penyulitan asimetri dalam Java

Kriptografi penyulitan asimetri dalam Java

王林
王林ke hadapan
2023-08-19 10:25:15614semak imbas

Cryptozoology ialah kajian dan amalan teknik yang berbeza untuk melindungi komunikasi daripada gangguan pihak ketiga. Ia digunakan untuk keselamatan rangkaian. Kami cuba membangunkan kaedah dan amalan untuk melindungi data sensitif. Satu-satunya matlamat kriptografi adalah untuk melindungi data daripada penyerang. Penyulitan asimetri juga dikenali sebagai penyulitan kunci awam/peribadi. Kunci persendirian, seperti namanya, akan kekal peribadi, manakala kunci awam boleh diedarkan. Penyulitan ialah hubungan matematik antara dua kunci, satu untuk penyulitan dan satu lagi untuk penyahsulitan. Sebagai contoh, jika terdapat dua kekunci "A1" dan "A2", maka jika kunci "A1" digunakan untuk penyulitan, "A2" digunakan untuk penyahsulitan dan sebaliknya.

Kami menggunakan algoritma RSA untuk penyulitan asimetri Mula-mula kami akan menjana sepasang kunci (kunci awam, kunci peribadi).

Kriptografi Penyulitan Asymmetric dalam Java

Untuk menjana kunci asimetri, langkah berikut boleh diikuti −

  • Pertama, kami menggunakan kelas SecureRandom untuk menjana kunci awam dan peribadi. Ia digunakan untuk menjana nombor rawak.

  • Dengan menggunakan algoritma RSA untuk menjana kunci Kelas ini akan menyediakan kaedah getInstance() yang digunakan untuk menghantar pembolehubah rentetan yang menandakan algoritma penjanaan kunci dan ia kembali kepada objek penjana kunci

  • Mulakan objek penjana kunci dengan saiz kunci 2048-bit, melepasi nombor rawak.
  • Sekarang, kunci rahsia dijana dan kami ingin melihat kunci yang kami boleh menukarnya ke dalam format hexbinary dengan menggunakan DatatypeConvertor
  • Sekarang laksanakan kaedah di atas −

Sintaks

// 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()));
	}
}

Output

<p style="color:#D2593F;"><img src="https://img.php.cn/upload/article/000/465/014/169241191890148.jpg" alt="Kriptografi penyulitan asimetri dalam Java" /><b></b></p>

Anda kini boleh mengambil langkah berikut untuk mencipta kod program −

    Kami menggunakan kelas sifir untuk mencipta dua mod berbeza: penyulitan dan penyahsulitan. Kunci penyulitan ialah kunci persendirian dan kunci penyahsulitan ialah kunci awam.
  • Panggil kaedah doFinal() pada sifir, yang boleh melakukan operasi satu bahagian pada data untuk menyulitkan/menyahsulit, atau melengkapkan operasi berbilang bahagian dan mengembalikan tatasusunan bait.
  • Akhirnya, kami mendapat teks sifir selepas menggunakan ENCRYPT_MODE untuk penyulitan.
  • Program, kod
// 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);
	}
}

Output

<p style="text-align: center; color: rgb(210, 89, 63);"><img src="https://img.php.cn/upload/article/000/465/014/169241191871435.jpg" alt="Kriptografi penyulitan asimetri dalam Java" /><b></b></p>

Kesimpulan

Oleh itu, menggunakan algoritma RSA kami mencipta teks yang disulitkan "Ini adalah PlainText yang saya mahu Encrpyt menggunakan RSA" dalam artikel ini

Atas ialah kandungan terperinci Kriptografi penyulitan asimetri dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam