1. 程式人生 > >RSA加密java版demo

RSA加密java版demo

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Scanner;

import javax.crypto.Cipher;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
 * 
 * @author leon
 *
 */
class RSAUtils {
  //預設公鑰的持久化檔案存放位置
	private static String PUBLIC_KEY_FILE = "PublicKey";
	//預設私鑰的持久化檔案存放位置
	private static String PRIVATE_KEY_FILE = "PrivateKey";

	//設定公私鑰持久化檔案的存放位置
	public static void setKeyPath(String path) {
		if (PUBLIC_KEY_FILE.equals("PublicKey")) {
			PUBLIC_KEY_FILE = path + (path.endsWith("//")?"PublicKey":"/PublicKey");
			PRIVATE_KEY_FILE = path + (path.endsWith("//")?"PrivateKey":"/PrivateKey");
		}
	}

	//建立公私鑰對
	private static void createKeyPair() throws Exception {
		//使用RSA演算法獲得金鑰對生成器物件keyPairGenerator
		KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
		//設定金鑰長度為1024
		keyPairGenerator.initialize(1024);
		//生成金鑰對
		KeyPair keyPair = keyPairGenerator.generateKeyPair();
		//獲取公鑰
		Key publicKey = keyPair.getPublic();
		//獲取私鑰
		Key privateKey = keyPair.getPrivate();
		//儲存公鑰物件和私鑰物件為持久化檔案
		ObjectOutputStream oos1 = null;
		ObjectOutputStream oos2 = null;
		try {
			oos1 = new ObjectOutputStream(new FileOutputStream(PUBLIC_KEY_FILE));
			oos2 = new ObjectOutputStream(
					new FileOutputStream(PRIVATE_KEY_FILE));
			oos1.writeObject(publicKey);
			oos2.writeObject(privateKey);
		} catch (IOException e) {
			throw new RuntimeException(e);
		} finally {
			oos1.close();
			oos2.close();
		}
	}
    
	//RSA加密
	public static String encryptWithRSA(String str) throws Exception {
		createKeyPair();
		Key publicKey = null;
		//讀取持久化的公鑰物件
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(new FileInputStream(PUBLIC_KEY_FILE));
			publicKey = (Key) ois.readObject();
		} catch (IOException e) {
			throw new RuntimeException(e);
		} finally {
			ois.close();
		}

		//獲取一個加密演算法為RSA的加解密器物件cipher。
		Cipher cipher = Cipher.getInstance("RSA");
		//設定為加密模式,並將公鑰給cipher。
		cipher.init(Cipher.ENCRYPT_MODE, publicKey);
		//獲得密文
		byte[] secret = cipher.doFinal(str.getBytes());
		//進行Base64編碼
		return new BASE64Encoder().encode(secret);
	}

	//RSA解密
	public static String decryptWithRSA(String secret) throws Exception {
		Key privateKey;
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));
			privateKey = (Key) ois.readObject();
		} catch (IOException e) {
			throw new RuntimeException(e);
		} finally {
			ois.close();
		}
		Cipher cipher = Cipher.getInstance("RSA");
		//傳遞私鑰,設定為解密模式。
		cipher.init(Cipher.DECRYPT_MODE, privateKey);
		//解密器解密由Base64解碼後的密文,獲得明文位元組陣列
		byte[] b = cipher.doFinal(new BASE64Decoder().decodeBuffer(secret));
		//轉換成字串
		return new String(b);

	}
}
public class RSA_Demo {
  public static void main(String[] args) throws Exception {
		//設定公私鑰對存放路徑,可選,預設是工程目錄
		//RSAUtils.setKeyPath(str);
		System.out.println("請輸入明文:");
		Scanner sca = new Scanner(System.in);
		String str =sca.nextLine();
		System.out.println("============================");
		String secret = RSAUtils.encryptWithRSA(str);
		System.out.println("經過RSA加密後的密文為:");
		System.out.println(secret);
		System.out.println("============================");
		String original = RSAUtils.decryptWithRSA(secret);
		System.out.println("經過RSA解密後的原文為:");
		System.out.println(original);
	}
}


相關推薦

RSA加密javademo

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputS

AES和RSA加密演算法入門Demo

首先感謝博主開園精神,此部落格是個人結合博主博文來進行一次個人的總結,加深學習印象。博主已經總結的非常的不錯,大家可以參考博主原文博主部落格地址 資料參考: 博主原始碼下載 百度百科 Java中有對稱加密和非對稱加密。 對稱加密演算法在加密和解密時

微信支付 獲取RSA加密公鑰API JAVA

UC val XML nonce 其中 final stack tps 下載 近做微信支付 企業付款到銀行卡,其中收款方銀行卡號、收款方用戶名需要獲取RSA加密公鑰API進行加密;本文以windows為例; 微信開發文檔地址:https://pay.weixin.qq.c

RSA加密算法--Java實現詳細案例:

數據 turn 是否 exce x509 ase algorithm 實現 date import org.apache.commons.codec.binary.Base64; import java.security.*; import java.security.

Java使用RSA加密算法對內容進行加密

hat trac ogg size gen cte false static doc 什麽是RSA加密算法 RSA是一種典型的非對稱性加密算法,具體介紹可參考阮一峰的日誌 RSA算法原理 下面是使用RSA算法對傳輸內容進行加密的一個簡要Java案例,主要用到了三個類,大體實

C# Java間進行RSA加密解密交互

exc add 交互 長度限制 orm keys 什麽 highlight arr 引用:http://blog.csdn.net/dslinmy/article/details/37362661 這裏,講一下RSA算法加解密在C#和Java之間交互的問題,這兩天糾結了很久

C#-java RSA加密解密

過程 data readline utf 解密 param rsa私鑰 convert graph using Org.BouncyCastle.Math;using Org.BouncyCastle.Crypto.Parameters;using Org.BouncyCa

RSA加密解密及數字簽名Java實現

cto 包括 sign object misc 數據 factory 了解 對稱密鑰 RSA公鑰加密算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在

Java使用非對稱數據加密RSA加密解密

ner tco init git turn comm [] 4類 fse   emmmmmm就是呢,我今天研究了一下非對稱數據加密RSA的使用,算法什麽的暫時不研究,加密算法還有很多,以後再研究吧,就醬(>人<;)。非對稱加密算法需要兩個密鑰:公開密鑰(publicKey)

RSA加密解密實現(JAVA

1.關於RSA演算法的原理解析參考:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 2.RSA金鑰長度、明文長度和密文長度參考:https://blog.csdn.net/liuhuabai100/article/deta

條理清晰的入門:使用Java實現RSA加密解密

條理清晰的入門:使用Java實現RSA加密解密 什麼是RSA 使用Java 需要匯入的標頭檔案 生成公鑰、私鑰 進行加密解密 金鑰的儲存 密文的儲存、讀取 什麼是RSA 翻一下以前的密碼

java 使用jsencrypt的js的rsa庫實現rsa加密傳輸,防止http明文傳輸

JSEncrypt 是js實現的rsa加密庫 前端使用rsa公鑰加密登入資訊,傳輸加密結果給服務端,服務端接收後使用私鑰解密,實現安全資訊傳輸 【注】:JSEncrypt支援的是openssl生成的pkcs1格式私鑰,java需要pkcs8格式私鑰,公鑰格式不變 //公私鑰生

通用RSA加密 - PHP+Java+Javascript加密解密

php端生成 公鑰私鑰 1、openssl genrsa -out rsa_private_key.pem 1024    私鑰 2、openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem&nbs

JAVA -----RSA加密解密簽名及校驗

由於專案要用到非對稱加密解密簽名校驗什麼的,於是參考《Java加密解密的藝術》寫一個RSA進行加密解密簽名及校驗的Demo,程式碼很簡單,特此分享! RSA加密解密類: package com.ihep; import java.io.BufferedRead

[Java] 【分享】微信APP支付Java的一個小demo

前一段時間公司搞微信的APP支付,看過微信的官方文件之後只能感嘆自己果然還是太嫩,只有思想,連個demo都沒有,上網到處查詢資料之後找了一個博主分享的看著相對靠譜的下載下來配置好了,改了一些回撥方面的錯誤,終於能正常執行,分享一下,給需要的人! 個人覺得核心部分的程式碼: 簽

RSA加密工具類(Java)

乾貨 package com.hht.exchange.utils; import javax.crypto.Cipher; import java.security.*; import java.security.spec.PKCS8EncodedKeySp

RSA加密演算法java簡單實現

有問題請掃描下圖 簡單完整的程式碼,通過這個程式碼你將對RSA加密演算法在Java中的實現方法有一個初步的瞭解,這個類,你可以直接使用,水平高的,就自己修改完善下程式碼。 package security; import java.security.*; import j

C# RSA加密、解密、加簽、驗籤、支援JAVA格式公鑰私鑰、PEM格式公鑰私鑰、.NET格式公鑰私鑰 -變態模式【支援私鑰加密,公鑰解密】(二)

RSA變態模式:【私鑰加密,公鑰解密】 一般這種寫法都是JAVA弄的。.NET原生不支援。為啥,我也不清楚,大概是因為安全性問題吧,畢竟公鑰是人人都可是持有的。私鑰只有自己擁有。 簽名一直都是【私鑰加簽、公鑰驗籤】只為證明該訊息是你發出來的。 這裡使用了BouncyC

C# Java間進行RSA加密解密互動(三)

/** * RSA加密 * @param text--待加密的明文 * @param key--公鑰,由伺服器端提供的經base64編碼的字串 * @return */ public static String RSAEncryptoWithPu

JAVA利用RSA加密演算法的長度限制問題解決完整程式碼

package com.additional; import java.io.ByteArrayOutputStream;   import java.security.Key;   import java.security.KeyFactory;   import jav