一、参考文档: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())));
}
}