parent
35b51712e5
commit
df0c86ceaf
1 changed files with 101 additions and 0 deletions
@ -0,0 +1,101 @@ |
|||||||
|
package org.panda.code.uitl; |
||||||
|
|
||||||
|
import javax.crypto.BadPaddingException; |
||||||
|
import javax.crypto.Cipher; |
||||||
|
import javax.crypto.IllegalBlockSizeException; |
||||||
|
import javax.crypto.NoSuchPaddingException; |
||||||
|
import java.io.UnsupportedEncodingException; |
||||||
|
import java.security.*; |
||||||
|
import java.security.interfaces.RSAPrivateKey; |
||||||
|
import java.security.interfaces.RSAPublicKey; |
||||||
|
import java.security.spec.InvalidKeySpecException; |
||||||
|
import java.security.spec.PKCS8EncodedKeySpec; |
||||||
|
import java.security.spec.X509EncodedKeySpec; |
||||||
|
import java.util.Base64; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* java RSA加密工具类 |
||||||
|
* @author qi |
||||||
|
**/ |
||||||
|
public class RSAUtils { |
||||||
|
/** |
||||||
|
* 密钥长度,越长越慢 |
||||||
|
*/ |
||||||
|
private final static int KEY_SIZE = 1024; |
||||||
|
/** |
||||||
|
* 算法-RSA |
||||||
|
*/ |
||||||
|
public static final String ALGORITHM_RSA = "RSA"; |
||||||
|
/** |
||||||
|
* 默认字符集编码 utf-8 |
||||||
|
*/ |
||||||
|
public static final String DEFALUT_CHART="utf-8"; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 用于封装随机参数的公钥和私钥 |
||||||
|
*/ |
||||||
|
private static Map<Integer,String> keyMap = new HashMap<>(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 生成随机密钥对 |
||||||
|
* @throws NoSuchAlgorithmException |
||||||
|
*/ |
||||||
|
public static void getKeyPair() throws NoSuchAlgorithmException { |
||||||
|
//keyPairGenerator类用于生成公钥和密钥对,基于RSA算法生成对象
|
||||||
|
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM_RSA); |
||||||
|
//初始化密钥生成器
|
||||||
|
keyPairGenerator.initialize(KEY_SIZE,new SecureRandom()); |
||||||
|
//生成密钥对,保存在keyPair中
|
||||||
|
KeyPair keyPair = keyPairGenerator.generateKeyPair(); |
||||||
|
//私钥
|
||||||
|
RSAPrivateKey privateKey =(RSAPrivateKey)keyPair.getPrivate(); |
||||||
|
//公钥
|
||||||
|
RSAPublicKey publicKey =(RSAPublicKey) keyPair.getPublic(); |
||||||
|
//得到密钥字符串
|
||||||
|
String publicKeyStr = Base64.getEncoder().encodeToString(publicKey.getEncoded()); |
||||||
|
String privateKeyStr = Base64.getEncoder().encodeToString(privateKey.getEncoded()); |
||||||
|
//将密钥保存到map中
|
||||||
|
//0表示公钥
|
||||||
|
keyMap.put(0,publicKeyStr); |
||||||
|
//1表示密钥
|
||||||
|
keyMap.put(1,privateKeyStr); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* RSA公钥加密 |
||||||
|
* @param str |
||||||
|
* @param publicKey |
||||||
|
* @return |
||||||
|
* @throws NoSuchAlgorithmException |
||||||
|
* @throws InvalidKeySpecException |
||||||
|
* @throws NoSuchPaddingException |
||||||
|
* @throws InvalidKeyException |
||||||
|
* @throws UnsupportedEncodingException |
||||||
|
* @throws BadPaddingException |
||||||
|
* @throws IllegalBlockSizeException |
||||||
|
*/ |
||||||
|
public static String encrypt(String str,String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException { |
||||||
|
byte[] decoded = Base64.getDecoder().decode(publicKey); |
||||||
|
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance(ALGORITHM_RSA).generatePublic(new X509EncodedKeySpec(decoded)); |
||||||
|
Cipher cipher = Cipher.getInstance(ALGORITHM_RSA); |
||||||
|
cipher.init(Cipher.ENCRYPT_MODE,pubKey); |
||||||
|
String outStr = Base64.getEncoder().encodeToString(cipher.doFinal(str.getBytes(DEFALUT_CHART))); |
||||||
|
return outStr; |
||||||
|
} |
||||||
|
|
||||||
|
public static String decrypt(String str,String privateKey) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { |
||||||
|
//64位解码加密后的字符串
|
||||||
|
byte[] inputByte = Base64.getDecoder().decode(str); |
||||||
|
//base64编码的密钥
|
||||||
|
byte[] decoded = Base64.getDecoder().decode(privateKey); |
||||||
|
RSAPrivateKey prikey = (RSAPrivateKey) KeyFactory.getInstance(ALGORITHM_RSA).generatePrivate(new PKCS8EncodedKeySpec(decoded)); |
||||||
|
Cipher cipher = Cipher.getInstance(ALGORITHM_RSA); |
||||||
|
cipher.init(Cipher.DECRYPT_MODE,prikey); |
||||||
|
String outStr = new String(cipher.doFinal(inputByte)); |
||||||
|
return outStr; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue