//公钥
public static final String PUBLIC_KEY_VALUES = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCHe2LfbDCwBnI5dLc6DA40CNLO3F/HRR183knhBX49SemIFnEW9BFUNY7i1qixMQg2CX12TBXG1nt+9OK6IdNcD5USowiKa+mQzK/I9Mu5f88LOpd1CZb2UVQd7sAA3t+ZLsQS0TvTeEFumI6Dci2AhAb2V3R2R1XdWstUzZbAmQIDAQAB";
//私钥
public static final String PRIVATE_KEY_VALUES = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAId7Yt9sMLAGcjl0tzoMDjQI0s7cX8dFHXzeSeEFfj1J6YgWcRb0EVQ1juLWqLExCDYJfXZMFcbWe3704roh01wPlRKjCIpr6ZDMr8j0y7l/zws6l3UJlvZRVB3uwADe35kuxBLRO9N4QW6YjoNyLYCEBvZXdHZHVd1ay1TNlsCZAgMBAAECgYA7/4FuzjvViFVHao/GDhawJoQtBd0Io2wGo252T3dzbusT0FRuxNFzyHAptsRoC/3F6Hf+Tn2KW+u+8nYB1f8CbWiK/ad9BfxwwN/RsHAuiW1Gulr1gv6pEQ+KIrDDwgypoiTlz/2jwXOV2Ux3iWnkeoU9z+vRypqL22ZyBX3dHQJBAMvWZTaFhmy+jw8Uq9gJpigI/zWAf9almoOxJF6JQ+rtUW87+yi21hlqNSJV63HLcyPG52c3mRIEXdm+1/1sEnMCQQCqJvNworX5dPzFmeQ54EKE0nBCpHxAYAMq6LVuWjprK627yXiUdR1qNRuxfh59dspYPBqSRDSSjs5RCR+JNMHDAkEAsLG2pt50OkutYxs+I1Wp7MZvxAcRyhVfrYyexDwk3b6+erf57b8gNIO2b38fS1NbCcZfzT+Ktu2GFTyzqoBGNQJBAIZENEeGbfiKQ0iedkThXTw4XtOHvnCCEx3SAhExa/XTwsVzZw4nGG4NuGuoLOEuUt+rlgAjiCS6Qb4aZ+M6WUcCQAKyJa1mmLiHhRlnDlpfFBiXGS+Sp6y+ztBkLivr88wtN4PU0jjxGKOnP2hdyTD/agWQ6ObG1gIoMvk/8RQBy7Y=";
//一次解密的长度
private static final int MAX_DECRYPT_BLOCK = 128;
//一次加密的长度
private static final int MAX_ENCRYPT_BLOCK = 117;
/**
* 解密
*
* @param byte_bwmw 报文密文
*/
public static String decrypt(byte[] byte_bwmw) {
try {
//根据给定的编码密钥创建一个新的 PKCS8EncodedKeySpec。
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(Base64.decode(PRIVATE_KEY_VALUES.getBytes()));
//返回转换指定RSA算法的 KeyFactory 对象。
KeyFactory kf = KeyFactory.getInstance("RSA");
//得到私钥对象
PrivateKey privateKey = kf.generatePrivate(spec);
获取一个加密算法为RSA的加解密器对象cipher。
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
//传递私钥,设置为解密模式。
cipher.init(Cipher.DECRYPT_MODE, privateKey);
//得到报文密文的长度
int inputLen = byte_bwmw.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
cache = cipher.doFinal(byte_bwmw, offSet, MAX_DECRYPT_BLOCK);
} else {
cache = cipher.doFinal(byte_bwmw, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_DECRYPT_BLOCK;
}
//解密后的数据
byte[] data = out.toByteArray();
out.close();
return new String(data);
} catch (Exception e) {
e.printStackTrace();
System.out.println("解密异常......");
return null;
}
}
/**
* 加密
*
* @param mingwen 明文
* @return
*/
public static byte[] encrypt(String mingwen) {
byte[] encryptedDatas = new byte[0];
try {
//根据给定的编码密钥创建一个新的 X509EncodedKeySpec
X509EncodedKeySpec spec = new X509EncodedKeySpec(Base64.decode(PUBLIC_KEY_VALUES));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(spec);
//得到Cipher对象来实现对源数据的RSA加密
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = mingwen.getBytes();
int inputLen = encryptedData.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段加密 doFinal
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(encryptedData, offSet, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
encryptedDatas = out.toByteArray();
//获取到报文的长度
int length = encryptedDatas.length;
System.out.println("报文长度是:" + length);
out.close();
} catch (Exception e) {
System.out.println("加密异常...");
e.printStackTrace();
}
return encryptedDatas;
}
自己建一个类,把代码贴进去就好了