apzl_leasing/src/com/ruoyi/common/utils/rsa/RSAPublicUtils.java
2020-07-03 16:58:38 +08:00

80 lines
2.6 KiB
Java

package com.ruoyi.common.utils.rsa;
import com.alibaba.fastjson.JSONObject;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.Date;
/**
* token 加密工具类
*/
public class RSAPublicUtils {
private static String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJYJcyDY6o29eo4/5AII88CnalMb8OFtLiTBWxu4UYHR5TYttHJk5dPvK/0hsAnz8WZsfP4bc8kGrA60eQIikOcCAwEAAQ==";
/**
* RSA公钥加密
*
* @param input 加密字符串
* publicKey 公钥
* @return 密文
* @throws Exception 加密过程中的异常信息
*/
public static String encrypt(String input) throws Exception {
ByteArrayOutputStream bops = null;
String encodeToString = null;
try{
//base64编码的公钥
byte[] decoded = Base64.getDecoder().decode(publicKey);
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
//RSA加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
// 标识
byte[] bytes = input.getBytes();
int inputLen = bytes.length;
int offLen = 0;//偏移量
int i = 0;
bops = new ByteArrayOutputStream();
while(inputLen - offLen > 0){
byte [] cache;
if(inputLen - offLen > 53){
cache = cipher.doFinal(bytes, offLen,53);
}else{
cache = cipher.doFinal(bytes, offLen,inputLen - offLen);
}
bops.write(cache);
i++;
offLen = 53 * i;
}
bops.close();
byte[] encryptedData = bops.toByteArray();
encodeToString = Base64.getEncoder().encodeToString(encryptedData);
}catch (Exception e){
e.printStackTrace();
throw new Exception("加密异常");
}finally {
if(bops != null){
bops.close();
}
}
return encodeToString;
}
public static void main(String[] args) throws Exception {
JSONObject param = new JSONObject();
param.put("userId", "1111");
param.put("date", new Date().getTime());
String message = param.toJSONString();
System.out.println("原文:" + message);
String messageEn = encrypt(message);
System.out.println("密文:" + messageEn);
}
}