使用hutool的rsa加解密工具,自定义公钥私钥字符串

欢迎使用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);

    }

测试结果:
在这里插入图片描述
到此就可以实现自定义密钥串的功能了。

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值