java加解密RSA使用方法代碼示例-創(chuàng)新互聯(lián)

最近為了分析一段請求流,不得不去研究一下RSA加密。

創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)古縣,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108

首先,強(qiáng)調(diào)一點(diǎn):密鑰的“鑰”讀“yue”,不是“yao”,額。。。


網(wǎng)上關(guān)于RSA的原理一抓一大把的,這里只是簡單說說我的理解:


1. 兩個足夠大的互質(zhì)數(shù)p, q;
2. 用于模運(yùn)算的模 n=p*q;
3. 公鑰KU(e, n)中的e滿足 1<e< (p-1)(q-1),且與(p-1)(q-1)互質(zhì);
4. 密鑰KR(d, n)中的d滿足  d*e % (p-1)(q-1)= 1,%是取余運(yùn)算。

因為公鑰是公開的,所以我知道了e和n,那么根據(jù)2,3,4式子的關(guān)系,我們只要從n的值推出p, q的值則可計算出d的值,也就能找到密鑰。


然而,關(guān)鍵就在這里, n=p*q,如果兩個互質(zhì)數(shù)p和q足夠大,那么根據(jù)目前的計算機(jī)技術(shù)和其他工具,至今也沒能從n分解出p和q,這是數(shù)學(xué)上的一個難題,也正是這個難題成為了RSA加密至今被廣泛使用的原因。換句話說,只要密鑰長度n足夠大(一般1024足矣),基本上不可能從公鑰信息推出私鑰信息。

好了,這里作為研究的隨筆,記錄一下java如何使用,以下主要有三種方法,基本大同小異,只是獲取公鑰私鑰的途徑不一樣就是了:


方法一:


利用KeyPairGenerator直接生成公鑰和密鑰,一般私鑰保留給服務(wù)端,公鑰交給客戶端。

public class RSACryptography {
	public static String data="hello world";
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		KeyPair keyPair=genKeyPair(1024);
		//獲取公鑰,并以base64格式打印出來
		PublicKey publicKey=keyPair.getPublic();		
		System.out.println("公鑰:"+new String(Base64.getEncoder().encode(publicKey.getEncoded())));
		//獲取私鑰,并以base64格式打印出來
		PrivateKey privateKey=keyPair.getPrivate();		
		System.out.println("私鑰:"+new String(Base64.getEncoder().encode(privateKey.getEncoded())));
		//公鑰加密
		byte[] encryptedBytes=encrypt(data.getBytes(), publicKey);	
		System.out.println("加密后:"+new String(encryptedBytes));
		//私鑰解密
		byte[] decryptedBytes=decrypt(encryptedBytes, privateKey);		
		System.out.println("解密后:"+new String(decryptedBytes));
	}
	//生成密鑰對
	public static KeyPair genKeyPair(int keyLength) throws Exception{
		KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA");
		keyPairGenerator.initialize(1024);		
		return keyPairGenerator.generateKeyPair();
	}
	//公鑰加密
	public static byte[] encrypt(byte[] content, PublicKey publicKey) throws Exception{
		Cipher cipher=Cipher.getInstance("RSA");//java默認(rèn)"RSA"="RSA/ECB/PKCS1Padding"
		cipher.init(Cipher.ENCRYPT_MODE, publicKey);
		return cipher.doFinal(content);
	}
	//私鑰解密
	public static byte[] decrypt(byte[] content, PrivateKey privateKey) throws Exception{
		Cipher cipher=Cipher.getInstance("RSA");
		cipher.init(Cipher.DECRYPT_MODE, privateKey);
		return cipher.doFinal(content);
	}
}

本文題目:java加解密RSA使用方法代碼示例-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article24/pdije.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站策劃、云服務(wù)器網(wǎng)站建設(shè)、動態(tài)網(wǎng)站網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化