目錄
非對稱加密在Java中的密碼學
輸出
現在可以採取以下步驟來建立程式碼 −
結論
Thus, using RSA algorithm we created encrypted text “This is the PlainText I want to Encrpyt using RSA” in this article.
首頁 Java java教程 Java中的非對稱加密密碼學

Java中的非對稱加密密碼學

Aug 19, 2023 am 10:25 AM
非對稱加密 java編程 密碼學

密碼學是研究和實踐不同技術以保護通訊免受第三方乾擾的學科。它用於網路安全。我們試圖開發方法和實踐來保護敏感資料。密碼學的唯一目標是保護資料免受攻擊者的侵害。非對稱加密也被稱為公鑰/私鑰加密。私鑰如其名,將保持私有,而公鑰可以分發。加密是兩個金鑰之間的數學關聯,一個用於加密,另一個用於解密。例如,如果有兩個金鑰“A1”和“A2”,那麼如果金鑰“A1”用於加密,“A2”用於解密,反之亦然。

我們使用RSA演算法進行非對稱加密,首先我們會產生一對金鑰(公鑰、私鑰)。

非對稱加密在Java中的密碼學

To generate asymmetric key following steps can be followed −

  • #首先,我們使用SecureRandom類別產生公鑰和私鑰。它用於生成隨機數。

  • By using RSA algorithm to generate keys. This class will provide getInstance() method which is used to pass a string variable which signify the key geneInstance() method which is used to pass a string variable which signify the key gene algorithm and it returns to key generator object#.

  • 使用2048位元金鑰大小初始化金鑰產生器對象,並傳遞隨機數。
  • Now, the secret key is generated and we want to look at the key we can convert it into hexbinary format by using DatatypeConvertor.
  • #現在實作上述方法 −

Syntax

// 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()));
	}
}
登入後複製

輸出

<p style="color:#D2593F;"><img src="/static/imghw/default1.png"  data-src="https://img.php.cn/upload/article/000/465/014/169241191890148.jpg"  class="lazy" alt="Java中的非對稱加密密碼學" /><b></b></p>
登入後複製

現在可以採取以下步驟來建立程式碼 −

    我們使用cipher類別創建兩種不同的模式:加密和解密。加密金鑰是私鑰,解密金鑰是公鑰。
  • 在密碼器上呼叫doFinal()方法,該方法可以對資料進行單部分操作進行加密/解密,或完成多部分操作並傳回位元組數組。
  • 最後,我們在使用ENCRYPT_MODE進行加密後得到了密文。
  • 程序,程式碼
// 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);
	}
}
登入後複製

輸出

<p style="text-align: center; color: rgb(210, 89, 63);"><img src="/static/imghw/default1.png"  data-src="https://img.php.cn/upload/article/000/465/014/169241191871435.jpg"  class="lazy" alt="Java中的非對稱加密密碼學" /><b></b></p>
登入後複製

結論

Thus, using RSA algorithm we created encrypted text “This is the PlainText I want to Encrpyt using RSA” in this article.

以上是Java中的非對稱加密密碼學的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用Java來寫一個簡單的學生成績報表產生器? 如何使用Java來寫一個簡單的學生成績報表產生器? Nov 03, 2023 pm 02:57 PM

如何使用Java來寫一個簡單的學生成績報表產生器?學生成績報表產生器是可以幫助老師或教育者快速產生學生成績報告的工具。本文將介紹如何使用Java來撰寫簡單的學生成績報表產生器。首先,我們要定義學生對象和學生成績對象。學生對象包含學生的姓名、學號等基本訊息,而學生成績對象則包含學生的科目成績和平均成績等資訊。以下是一個簡單的學生物件的定義:public

如何使用Java來寫一個簡單的學生考勤管理系統? 如何使用Java來寫一個簡單的學生考勤管理系統? Nov 02, 2023 pm 03:17 PM

如何使用Java來寫一個簡單的學生考勤管理系統?隨著科技的不斷發展,學校管理系統也不斷更新和升級。學生考勤管理系統是其中重要的一環,它能幫助學校追蹤學生的出勤狀況,提供數據分析和報告。本文將介紹如何使用Java來寫一個簡單的學生考勤管理系統。一、需求分析在開始編寫之前,我們需要先確定係統的功能和需求。基本的功能包括學生資訊的註冊和管理、學生考勤資料的記錄和

Java程式:將字串中每個單字的首字母大寫化 Java程式:將字串中每個單字的首字母大寫化 Aug 20, 2023 pm 03:45 PM

String是'java.lang'套件中的一個類,儲存一系列字元。這些字元實際上是字串類型的物件。我們必須將字串的值用雙引號括起來。一般來說,我們可以在Java中用小寫和大寫來表示字元。而且,也可以轉換

如何利用Java實現倉庫管理系統的庫存統計功能 如何利用Java實現倉庫管理系統的庫存統計功能 Sep 24, 2023 pm 01:13 PM

如何利用Java實現倉庫管理系統的庫存統計功能隨著電子商務的發展和倉儲管理的日益重要,庫存統計功能成為倉庫管理系統中不可或缺的一部分。利用Java語言編寫的倉庫管理系統可以透過簡潔高效的程式碼實現庫存統計功能,幫助企業更好地管理倉庫存儲,提高營運效率。一、背景介紹倉庫管理系統是指用電腦科技對企業的倉庫進行資料管理、資訊處理與決策分析的一種管理手段。庫存統計是

ChatGPT Java:如何建構一個智慧音樂推薦系統 ChatGPT Java:如何建構一個智慧音樂推薦系統 Oct 27, 2023 pm 01:55 PM

ChatGPTJava:如何建立一個智慧音樂推薦系統,需要具體程式碼範例引言:隨著網路的快速發展,音樂成為人們日常生活中不可或缺的一部分。而隨著音樂平台的不斷湧現,使用者經常面臨一個共同的問題:如何找到符合自己口味的音樂?為了解決這個問題,智慧音樂推薦系統應運而生。本文將介紹如何使用ChatGPTJava建立智慧音樂推薦系統,並提供具體程式碼範例。第

如何使用Java程式實現高德地圖API的地址位置附近搜索 如何使用Java程式實現高德地圖API的地址位置附近搜索 Jul 30, 2023 pm 07:41 PM

如何使用Java程式實現高德地圖API的地址位置附近搜尋引言:高德地圖是一款相當受歡迎的地圖服務,廣泛應用於各類應用程式。其中,地址位置附近搜尋功能提供了搜尋附近POI(PointofInterest,興趣點)的能力。本文將詳細說明如何使用Java程式實現高德地圖API的地址位置附近搜尋功能,透過程式碼範例幫助讀者了解並掌握相關技術。一、申請高德地圖開發

Java開發中常見的效能監控與調優工具 Java開發中常見的效能監控與調優工具 Oct 10, 2023 pm 01:49 PM

Java開發中常見的效能監控和調優工具,需要具體程式碼範例引言:隨著網路技術的不斷發展,Java作為一種穩定、高效的程式語言,在開發過程中廣泛使用。然而,由於Java的跨平台性以及運作環境的複雜性,效能問題成為開發中不可忽視的因素。為了確保Java應用程式的高可用性和快速回應,開發人員需要對效能進行監控和調優。本文將介紹一些常見的Java效能監控與調

Java中的對稱加密密碼學 Java中的對稱加密密碼學 Sep 13, 2023 pm 03:49 PM

簡介對稱加密,也稱為金鑰加密,是一種加密方法,其中相同的金鑰用於加密和解密。這種加密方法快速且有效率,適用於加密大量資料。最常用的對稱加密演算法是高級加密標準(AES)。 Java提供了對對稱加密的強大支持,其中包括javax.crypto套件中的類,如SecretKey、Cipher和KeyGenerator。 Java中的對稱加密javax.crypto套件中的JavaCipher類別提供了加密和解密的密碼功能。它構成了Java加密擴充(JCE)框架的核心。在Java中,Cipher類別提供對稱加密的功能,而K

See all articles