package com.aarony.test;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class EncryptionRSADemo2 {
/**
*
* 此方法描述的是:解密密匙
*
* @author: Aarony
* @version: 2018年6月20日 下午9:44:38
*/
public static byte[] privateEncrypt(byte[] bytes, PrivateKey privateKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
return cipher.doFinal(bytes);
}
/**
*
* 此方法描述的是:加密
*
* @author: Aarony
* @version: 2018年6月20日 下午9:44:47
*/
public static byte[] publicEncrypt(byte[] bytes, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(bytes);
}
/**
*
* 此方法描述的是:解密base64 位的密钥
*
* @author: Aarony
* @version: 2018年6月20日 下午9:40:51
*/
public static PrivateKey string2PrivateKey(String privateStr) throws Exception {
byte[] bytes = base642byte(privateStr);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePrivate(keySpec);
}
/**
*
* 此方法描述的是:解密base64 位的公钥
*
* @author: Aarony
* @version: 2018年6月20日 下午9:40:51
*/
public static PublicKey string2PublicKey(String pubStr) throws Exception {
byte[] bytes = base642byte(pubStr);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(keySpec);
}
/**
*
* 此方法描述的是:生成keypair
*
* @author: Aarony
* @version: 2018年6月20日 下午9:35:43
* @throws NoSuchAlgorithmException
*/
public static KeyPair getKeyPair() throws NoSuchAlgorithmException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
return keyPairGenerator.generateKeyPair();
}
/**
*
* 此方法描述的是:获取公钥
*
* @author: Aarony
* @version: 2018年6月20日 下午9:37:13
*/
public static String getPublicKey(KeyPair keyPair) {
PublicKey key = keyPair.getPublic();
return byte2base64(key.getEncoded());
}
/**
*
* 此方法描述的是:获取公钥
*
* @author: Aarony
* @version: 2018年6月20日 下午9:37:13
*/
public static String getPrivateKey(KeyPair keyPair) {
PrivateKey key = keyPair.getPrivate();
return byte2base64(key.getEncoded());
}
/**
*
* 此方法描述的是:base64 解码
*
* @author: Aarony
* @version: 2018年6月20日 下午9:16:57
*/
public static byte[] base642byte(String base64) throws IOException {
BASE64Decoder decoder = new BASE64Decoder();
return decoder.decodeBuffer(base64);
}
/**
*
* 此方法描述的是: base 64编码
*
* @author: Aarony
* @version: 2018年6月20日 下午9:15:14
*/
public static String byte2base64(byte[] bytes) {
BASE64Encoder base = new BASE64Encoder();
return base.encode(bytes);
}
}