RSA工具类,这个就是网上大多数通用的代码了,无非就是生成密钥,获取公,私钥,分段加解密这些了。
注意:1、RSA默认支持最大加密的为117位,解密的为128,如果你的内容超出了就必须要进行分段加解密。刚一开始楼主报的错误就是因为这一个。
2、还有一个要提一下的,毕竟曾经掉进过坑里。1024位的密钥和2048位的密钥解密最大分别对应128和256,我下面打了注释的,多留意一下。
package com.qyq.springbootapi.util;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class RsaUtil {
/**
* 指定加密算法
*/
private static final String KEY_ALGORITHM = "RSA";
/**
* 指定生成多少位的密钥
*/
private static final int KEY_BIT = 1024;
/** *//**
* RSA最大加密明文大小
*/
private static final int MAX_ENCRYPT_BLOCK = 117;
/** *//**
* RSA最大解密密文大小
* 1024位密钥的要设置为128,
* 248位密钥的要改成256,不然会报错
*/
private static final int MAX_DECRYPT_BLOCK = 128;
/**
* 生成密钥对
* @return
* @throws Exception
*/
public static Map<String,Object> genKeyPair() throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
keyPairGenerator.initialize(KEY_BIT);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();//生成公钥
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();//生成密钥
Map<String