RSA非对称加密

一、参考文档:https://blog.csdn.net/true100/article/details/49489137

二、实例代码:

package com.szy.project.test;

import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import org.apache.commons.codec.binary.Hex;

public class RSA {


	private static String privateKEY = "30820155020100300d06092a864886f70d01010105000482013f3082013b02010002410097792cb69ddd25f48921c829589daba1e0e9ab1de9922f05b15f87ff903c124feaebfbff7a91737d0a217b79803d5baa39e81755459bf6e7f3cbb7b09d673ee5020301000102410080f62ce869ad20247b2064df36d03e913b0116ac07f16ad168fb51b9771e7de3701ba60f34ba35c10d7582a057975f996f2398fda4115dc58ac807ecbe758a5d022100f28c5b6c200fb8e6e5c1b6eb320c623e1c6c88d9937414292c367fcb003dfed70221009fdfc1da7ce0eb72b8a6005dd3b5b2640f4aa80bf8c79fd685321388726e64a3022100d9fc331e16228b37593ea43af51c141f66445529d64ff8de9811d3008b132cb902203cbf42e3882bd68b02ca60bd462276243b033d133f766aaf9270d2a73803e64d02204366c328944742eccede0e79938d80711064b345766f546c93a8c5c2815d89c7";
	
	private static String publicKEY = "305c300d06092a864886f70d0101010500034b00304802410097792cb69ddd25f48921c829589daba1e0e9ab1de9922f05b15f87ff903c124feaebfbff7a91737d0a217b79803d5baa39e81755459bf6e7f3cbb7b09d673ee50203010001";

	public static void main(String[] args) {
		
		String param = "我喜欢美女";
		try {
			createSecret();
			System.out.println("加密前:"+param);
			System.out.println("**********私钥加密 ->公钥解密*************");
			String privateKeyEncrypt = privateKeyEncrypt(param);
			System.out.println("私钥加密后:"+privateKeyEncrypt);
			String publicKeyDecrypt = publicKeyDecrypt(privateKeyEncrypt);
			System.out.println("公钥解密后:"+publicKeyDecrypt);
			System.out.println("***********公钥加密 -> 私钥解密*************");
			String publicKeyEncrypt = publicKeyEncrypt(param);
			System.out.println("公钥加密后:"+publicKeyEncrypt);
			System.out.println("私钥解密后:"+privateKeyDecrypt(publicKeyEncrypt));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/**秘钥生成器
	 * @throws Exception
	 */
	private static void createSecret() throws Exception{
		KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
		keyPairGenerator.initialize(512);
		KeyPair keyPair = keyPairGenerator.generateKeyPair();
		//公钥
		RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
		//私钥
		RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
		System.out.println("RSA公钥:" + Hex.encodeHexString(rsaPublicKey.getEncoded()));
		System.out.println("RSA私钥:" + Hex.encodeHexString(rsaPrivateKey.getEncoded()));
	}

	/***************************************************私钥加密  公钥解密**********************************************************/
	/**私钥加密
	 * @param privateKEY
	 * @return
	 * @throws Exception
	 */
	private static String privateKeyEncrypt(String param) throws Exception{
		PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Hex.decodeHex(privateKEY.toCharArray()));
		KeyFactory keyFactory = KeyFactory.getInstance("RSA");
		PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
		Cipher cipher = Cipher.getInstance("RSA");
		cipher.init(Cipher.ENCRYPT_MODE, privateKey);
		return Hex.encodeHexString(cipher.doFinal(param.getBytes()));
	}
	
	
	/**公钥解密
	 * @return
	 * @throws Exception 
	 */
	private static String publicKeyDecrypt(String encryptStr) throws Exception{
		X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Hex.decodeHex(publicKEY.toCharArray()));
		KeyFactory keyFactory = KeyFactory.getInstance("RSA");
		PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
		Cipher cipher = Cipher.getInstance("RSA");
		cipher.init(Cipher.DECRYPT_MODE, publicKey);
		return new String(cipher.doFinal(Hex.decodeHex(encryptStr.toCharArray())));
	}
	
	/***********************************************公钥加密     私钥解密****************************************************/
	
	/**公钥加密
	 * @param param
	 * @return
	 * @throws Exception
	 */
	private static String publicKeyEncrypt(String param) throws Exception{
		X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Hex.decodeHex(publicKEY.toCharArray()));
		KeyFactory keyFactory = KeyFactory.getInstance("RSA");
		PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
		Cipher cipher = Cipher.getInstance("RSA");
		cipher.init(Cipher.ENCRYPT_MODE, publicKey);
		return Hex.encodeHexString(cipher.doFinal(param.getBytes()));
	}
	
	/**私钥解密
	 * @param encryptStr
	 * @return
	 * @throws Exception
	 */
	private static String privateKeyDecrypt(String encryptStr) throws Exception{
		PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Hex.decodeHex(privateKEY.toCharArray()));
		KeyFactory keyFactory = KeyFactory.getInstance("RSA");
		PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
		Cipher cipher = Cipher.getInstance("RSA");
		cipher.init(Cipher.DECRYPT_MODE, privateKey);
		return new String(cipher.doFinal(Hex.decodeHex(encryptStr.toCharArray())));
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值