欢迎使用hutool
目前开源市场上小编发现了一款很好用的工具类Hutool,其中整合、封装了很多的工具类库,包括我们常用的日期时间处理、io处理、json等等,当初个人也是因为RSA的加解密使用时发现了这款优秀的库,强烈推荐大家使用。
怎样使用RSA的加解密工具
简单使用
如果是简单不需要自定义公钥私钥时可以直接依照官方的demo进行使用,在这也顺便贴上
RSA rsa = new RSA();
//获得私钥
rsa.getPrivateKey()
rsa.getPrivateKeyBase64()
//获得公钥
rsa.getPublicKey()
rsa.getPublicKeyBase64()
//公钥加密,私钥解密
byte[] encrypt = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey);
//Junit单元测试
//Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8));
//私钥加密,公钥解密
byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.CHARSET_UTF_8), KeyType.PrivateKey);
byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey);
//Junit单元测试
//Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt2, CharsetUtil.CHARSET_UTF_8));
如果是要生成随机的密钥对,官方也有提供示例
KeyPair pair = SecureUtil.generateKeyPair("RSA");
pair.getPrivate();
pair.getPublic();
自定义密钥对
上述demo并不满足小编的使用,因为需求是我们自定义公钥私钥,比如说我规定的公钥是:“公钥加密”,那么我的这个公钥字符串如何转变为符合相关格式的秘钥串呢?下面呈上公钥/私钥的格式转换方法:
/**
* @desc: 将字符串转换成RSAPublicKey类型
* @date 2020-6-12 11:03:05
* @param
* @return
*/
public static RSAPublicKey getRSAPublidKeyBybase64(String base64s) throws Exception {
X509EncodedKeySpec keySpec = new X509EncodedKeySpec((new BASE64Decoder()).decodeBuffer(base64s));
RSAPublicKey publicKey = null;
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
try {
publicKey = (RSAPublicKey)keyFactory.generatePublic(keySpec);
} catch (InvalidKeySpecException var4) {
}
return publicKey;
}
/**
* @desc: 将字符串转换成RSAPrivateKey类型
* @date 2020-6-12 11:03:01
* @param
* @return
*/
public static RSAPrivateKey getRSAPrivateKeyBybase64(String base64s) throws Exception{
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec((new BASE64Decoder()).decodeBuffer(base64s));
RSAPrivateKey privateKey = null;
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
try {
privateKey = (RSAPrivateKey)keyFactory.generatePrivate(keySpec);
} catch (InvalidKeySpecException var4) {
}
return privateKey;
}
这两个方法就可以将我们的自定义秘钥字符串转变为符合RSA格式的密钥串了。
测试用例
public static void testXxx() throws Exception {
AsymmetricCrypto asymmetricCrypto = new AsymmetricCrypto("RSA", getRSAPrivateKeyBybase64("私钥解密"),
getRSAPublidKeyBybase64("公钥加密"));
String s1 = asymmetricCrypto.encryptBase64("你好呀", KeyType.PublicKey);
System.out.println(s1);
String s = asymmetricCrypto.decryptStr(s1, KeyType.PrivateKey);
System.out.println(s);
}
测试结果:
到此就可以实现自定义密钥串的功能了。