package com.sgcc.common;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
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.Iterator;
import java.util.Map;
import java.util.Set;
public class RsaUtil {
private String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKzQRnD0MfToiCoGBIOeN0bqmKKcnyahrYRuZpwucIQJgCcDMz4u6lM1dW0DVw3jjJBK4tEye3z4FnthNE7yFlXVdncj8iHUdF/F4rNTsE/ATK3PdSlCa0jCoYHrcb1jB8HBc7zly8qCQUB+KsVchsTd+6pm9KJXtAQtPg7SciqxAgMBAAECgYAfAScCMO2dkPKNB5NbwdENCh3kXtE27x7geaYzMynApqu1VB+ncmdcEmVE76p4tXCMmsLi4XnCTAhMjn4CA/D5nbbqtlC+ihhnRMnuSHXGKFxenZhqwRglr18mtitQm2hNJHZyptjrGeWbviG1957J/qJLdJ22XhDK9m4f7ESM2QJBAOBsCECyxJSRxSVbJJGCUVtt+tP4rXb261PvWKgLxrW41WLT8HirzXBRSg8AqcKHxiKiamQ83hij37EPI3Ni/+sCQQDFIT3JLQ6LuD+t9XECRsHdIRVwHs+hENkcNC8oGFmNMiv400mtMFGo73KsW1rX21cYyh3DugJu5L/es5fBuLTTAkB6Xo3VcWS9OgrMhrkW2n8wInTtliBHyPWia9TktJ8iQWmhHL13nv5DKx/9tDfciZohEnx+sa3Ms7ZqXj3PUgEHAkEArKFfqj1674B6w6ydOpEcVLoUPAu/aB2JA9nvMf2g7rVxLIZbjv8xg++tTKLz+vRqYZseVbkfSF2qaSx9SXinYQJACEbamOTKNUEwZLEqNkZ7UQ9MyktazZeRnvGOjNiTPXaKaXCTfPeZXty85g5zjg8QRBj6rEibncJgQZoqSP33BA==";
private String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCs0EZw9DH06IgqBgSDnjdG6piinJ8moa2EbmacLnCECYAnAzM+LupTNXVtA1cN44yQSuLRMnt8+BZ7YTRO8hZV1XZ3I/Ih1HRfxeKzU7BPwEytz3UpQmtIwqGB63G9YwfBwXO85cvKgkFAfirFXIbE3fuqZvSiV7QELT4O0nIqsQIDAQAB";
public void initKey() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException, InvalidKeySpecException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
long time = System.currentTimeMillis();
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
System.out.println("publicKey:" + Base64.getEncoder().encodeToString(publicKey.getEncoded()));
System.out.println("privateKey:" + Base64.getEncoder().encodeToString(privateKey.getEncoded()));
System.out.println("execute time:" + (System.currentTimeMillis() - time));
System.out.println("===================================================");
}
public String encryptByPrivateKey(String privateKey, String text)
throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException,
BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, rsaPrivateKey);
byte[] bytes = cipher.doFinal(text.getBytes("utf-8"));
return Base64.getEncoder().encodeToString(bytes);
}
public String encryptByPublicKey(String publicKey, String text)
throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException,
BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, rsaPublicKey);
byte[] bytes = cipher.doFinal(text.getBytes("utf-8"));
return Base64.getEncoder().encodeToString(bytes);
}
public String decryptByPrivateKey(String privateKey, String text)
throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException,
BadPaddingException, IllegalBlockSizeException {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, rsaPrivateKey);
byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(text));
return new String(bytes);
}
public String decryptByPublicKey(String publicKey, String text)
throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException,
BadPaddingException, IllegalBlockSizeException {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, rsaPublicKey);
byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(text));
return new String(bytes);
}
/**
*
*/
public void vaildParam(String text, String md5) {
// test MD5加密
// 验证加密后与 md5 是否 一致
}
/**
* 公钥加密
*
* @param Rsaparam
* @return
*/
public String rsaEncryptionByPubK(String Rsaparam) {
// TODO Auto-generated method stub
String mv = "";
try {
mv = encryptByPublicKey(publicKey, Rsaparam);
} catch (UnsupportedEncodingException | InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException
| NoSuchPaddingException | BadPaddingException | IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mv;
}
/**
* 私钥加密
*
* @param Rsaparam
* @return
*/
public String rsaEncryptionByPriK(String Rsaparam) {
// TODO Auto-generated method stub
String mv = "";
try {
mv = encryptByPrivateKey(privateKey, Rsaparam);
} catch (InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException | NoSuchPaddingException
| BadPaddingException | IllegalBlockSizeException | UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mv;
}
/*public static void main(String[] args) {
String p = new RsaUtil().rsaAnalysisByPubK("fiP0d3MupEubdciJTmj9a3i/4rGnX3OqpxDcNY6MxPVit2b7cncU640d0RrCgeaK0Otq0b7vMkC/Gidkj5GpYOgc2Is3XFtOn6qpywtnhWR/BhThXWIT1WaFPQLdZWBZq1ocGI762iFOE4q3LAlQ6UmTBcPWJqgvv/RGjM9eh+c=");
System.out.println(p);
}*/
/**
* 公钥解密
*
* @param Rsaparam
* @return
*/
public String rsaAnalysisByPubK(String Rsaparam) {
// TODO Auto-generated method stub
String mv = "";
try {
mv = decryptByPublicKey(publicKey, Rsaparam);
} catch (InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException | NoSuchPaddingException
| BadPaddingException | IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mv;
}
/**
* 私钥解密
*
* @param Rsaparam
* @return
*/
public String rsaAnalysisByPriK(String Rsaparam) {
// TODO Auto-generated method stub
String mv = "";
try {
mv = decryptByPrivateKey(privateKey, Rsaparam);
} catch (InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException | NoSuchPaddingException
| BadPaddingException | IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mv;
}
/**
* 解析rsa加密对象
*
* @param Rsaparam
* @return
*/
public String rsaAnalysis(String Rsaparam) {
return recursion(Rsaparam).toJSONString();
}
public static void main(String[] args) {
RsaUtil rsa = new RsaUtil();
String str = "{\"serviceCode\":\"f07\",\"data\":{\"common\":{\"TOKEN\":\"6a58370e5d5f42c892e0da454299c403\",\"CHANNEL_RESOURCE\":\"123456789\"},\"data\":{\"BNKCRDNO\":\"6214830177541538\"}} }";
String str1="{\"data\":{\"common\":{\"CHANNEL_RESOURCE\":\"fiP0d3MupEubdciJTmj9a3i/4rGnX3OqpxDcNY6MxPVit2b7cncU640d0RrCgeaK0Otq0b7vMkC/Gidkj5GpYOgc2Is3XFtOn6qpywtnhWR/BhThXWIT1WaFPQLdZWBZq1ocGI762iFOE4q3LAlQ6UmTBcPWJqgvv/RGjM9eh+c=\",\"TOKEN\":\"pOhY1GLydz85gZCxcDED6SfBW7wKgDA0F0EIYcQTzUN4YxgFhhBfpQChj7kgiMstZrpaygLVp133V5WlMszk51tGJDe4b5qd70l9uDSrnYYmcEz43DM9bIQcp4DdR3Lb/LjIajBCK5n/hynqLRQGQPtWicAmW5OlTP8ISMFHTxA=\"},\"data\":{\"BNKCRDNO\":\"Y61tL1U1tk8kwWVVClxwBoCVuWXk5kldJ9gmYddTclNpxoytpWXmB2hqk2K4AEGRpHLNsbfpH238bxrE0Djecc9vJIOAFnZRo7rjUNXjwFkSqSV/M+2A/XMCM4YeLpUlc2URLGScB5vmArw986aRdjyvS9wE1WvAH+M9Z6Pwffw=\"}},\"serviceCode\":\"bCb0xRXIaNj9jVnkcegerJI3x175CZ2KAmvy/jzEb0Ud5BdIinKNowhwE4kte3e+s1Mvjze8ma1gHqbmXvyv3J7Yy7POYBdg7g5jXbt45EyJoiiSqkK8Bas6YSpnaGNBVwPWAl1iYeZ6Vl6fmy7uY0rfuYNJq9uTdUT0rsMczpM=\"}";
String str2 = "{\"uscInfo\":{\"isEncrypt\":false,\"deviceId\":\"865772032263400\",\"member\":\"grid_online\",\"tenant\":\"state_grid\",\"deviceIp\":\"127.0.0.1\"},\"quInfo\":{\"password\":\"0263bcf70efc6b086280efe4c8d5bf2e\",\"optSys\":\"android\",\"account\":\"17611257312\",\"addressCity\":330300,\"addressRegion\":330324,\"addressProvince\":330000,\"pushId\":\"1507bfd3f7d57d1011d\"} }";
System.out.println(str);
System.out.println(rsa.recursion(str2).toJSONString());
}
private JSONObject recursion(String param) {
if (isJsonObject(param)) {
JSONObject jsonObject = JSONObject.parseObject(param);
Set<String> set = jsonObject.keySet();
for (String key : set) {
String value = jsonObject.get(key).toString();
if (isJsonObject(value)) {
jsonObject.put(key, recursion(value));
} else {
//value = rsaEncryptionByPriK(value);//私钥加密
value = rsaAnalysisByPubK(value);//公钥解密
jsonObject.put(key, value);
}
}
return jsonObject;
} else {
return null;
}
}
/**
* 判断字符串是否可以转化为json对象
*
* @param content
* @return
*/
public static boolean isJsonObject(String content) {
if (StringUtils.isBlank(content))
return false;
try {
JSONObject jsonStr = JSONObject.parseObject(content);
if (content.contains(":")) {
return true;
} else {
return false;
}
} catch (Exception e) {
return false;
}
}
}
rsa数据加密
猜你喜欢
转载自blog.csdn.net/qq_36364521/article/details/84065176
今日推荐
周排行