加密解密使用文档只针对后端调用:
一:使用包含2各部分
1:加密原文---使用公钥加密原文产生密文
2:post请求---将密文放到请求中请求数据
1:加密原文(原文可以为随机字符,但是原文最好不要超过十个字符,大量字符会导致效率不高):
package com.vbpncc.rsa.rsa;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
/**
* 公钥加密私钥解密
*/
public class 分段加密解密 {
/**
* @param publicKeyStr 经过Base64编码过的公钥字符串
* @param content
* @return {@link String}
* @throws
* @Description: TODO(使用公钥加密)
* @date 2020/9/27 23:12
*/
public static String publicKeyEncrypt(String content, String publicKeyStr)
throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, NoSuchProviderException, IOException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, IOException {
// 传递进来的公钥是经过Base64编码过的字符串,要返回成字节数组形式,需要解码
byte[] decodePublicKeyByte = Base64.getDecoder().decode(publicKeyStr);
//调用X509EncodedKeySpec对象,转换格式
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(decodePublicKeyByte);
//调用密钥工厂
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
//调用Java加密的Cipher对象,
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);//第一个参数表示这是加密模式,第二个参数表示密钥
cipher.init(Cipher.ENCRYPT_MODE, publicKey,new SecureRandom(new byte[]{1}));//第一个参数表示这是加密模式,第二个参数表示密钥
//分段加密
byte[] bytesContent = content.getBytes();
int inputLen = bytesContent.length;
int offLen = 0;//偏移量
int i = 0;
ByteArrayOutputStream bops = new ByteArrayOutputStream();
while (inputLen - offLen > 0) {
byte[] cache;
if (inputLen - offLen > 256) {
cache = cipher.doFinal(bytesContent, offLen, 256);
} else {
cache = cipher.doFinal(bytesContent, offLen, inputLen - offLen);
}
bops.write(cache);
i++;
offLen = 256 * i;
}
bops.close();
byte[] encryptedData = bops.toByteArray();
//使用Base64对加密结果进行编码
String encode = Base64.getEncoder().encodeToString(encryptedData);
return new String(encode);
}
public static void main(String[] args) throws
NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, InvalidKeySpecException, NoSuchPaddingException, IOException, NoSuchProviderException {
String input = "410000";
//一下公钥是假的,需要自行替换
String publickey="MIIBIjANBg8vzwz4CrtuK+orDxeydB7rrI3L7CDAfMgJR9YUwS1LRoSZo6FBcq2r99Y2BY1/CDDfRrtNrgANyP8euPAnK71798IZjC4TglxZPqSZLCqTKxtogHsygzUmr0yQNlCsq2VZRioUJwNAh/MxUdA3p5UfDxriZHcjM61JlTohfyh8JkleTclJaM3/EJMmL8Ohl7L8bWM0nATAsfwZzZgKtVctjdLaKhdV9f1F0c4ChLD7z+Y2/A10r+kO4pHMqS0kjTfA0tbNsM5HlLziwlwfeUyKh6MqEygnBgioF4aJ4mUfE7P+CYO2knfQqZagItWDsEESEIYzVUPaAbkSeE18d8QIDAQAB";
String en = publicKeyEncrypt(input, publickey);
System.out.println("原文:" + input);
System.out.println("密文:" + en);
}
}
2:请求