非对称加密有公钥和私钥两个概念,私钥自己拥有,不能给别人,公钥公开。根据应用的不同,我们可以选择使用不同的密钥加密:

  1. 签名:使用私钥加密,公钥解密。用于让所有公钥所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改,但是不用来保证内容不被他人获得。

  2. 加密:用公钥加密,私钥解密。用于向公钥所有者发布信息,这个信息可能被他人篡改,但是无法被他人获得。

以下方法均引入了hutools 非对称加密-AsymmetricCrypto (hutool.cn)

// 获取秘钥对
KeyPair pair = SecureUtil.generateKeyPair("RSA", 4096);
String privateKey=Base64Encoder.encode(pair.getPrivate().getEncoded());
String publicKey=Base64Encoder.encode(pair.getPublic().getEncoded());

分段加密解密

var rsa = SecureUtil.rsa(privateKey, publicKey);
// 4096为创建秘钥时设置的长度
var len=4096/8;
// 设置分段块长度
rsa.setDecryptBlockSize(len);
rsa.setEncryptBlockSize(len - 11);
 
// 加密
rsa.encryptHex(json, KeyType.PublicKey, StandardCharsets.UTF_8);
// 解密
rsa.decryptStr(json, KeyType.PrivateKey, StandardCharsets.UTF_8);