Hutool非对称加解密

非对称加密好处, 就是可以公钥加密, 私钥解密, 或是私钥加密,公钥验签, 双向互信. 公钥对外不保密.也保证了秘钥安全.

hutool加解密文档地址

非对称加密-AsymmetricCrypto | Hutool

官方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));

1. 可以new  RSA对象生成随机密钥对, 对内容加解密

2. 使用公钥,私钥生成RSA对象, 加解密内容

3. 加密内容可以通过base64由byte[]数组转字符串进行网络传播

@Test
    public void test3() {
        RSA rsa = new RSA();
        rsa.getPrivateKey();
        // 可以获取私钥字符串用于保存
        String privateKeyBase64 = rsa.getPrivateKeyBase64();
        System.out.println("privatekey-->"+privateKeyBase64);
        rsa.getPublicKey();
        // 获取公钥字符串用于存储
        String publicKeyBase64 = rsa.getPublicKeyBase64();
        System.out.println("publickey-->"+publicKeyBase64);
        //加密内容byte[]处理
        byte[] aByte = StrUtil.bytes("我是一段测试aaaa", CharsetUtil.CHARSET_UTF_8);
        System.out.println(new String(aByte));
        //byte[]内容加密
        byte[] encrypt = rsa.encrypt(aByte, KeyType.PublicKey);
        //加密后base64处理用于网络传输
        String encStr=Base64.encode(encrypt);
        System.out.println("加密串--"+encStr);
        //网络另一方收到内容进行base64解密 转加密的byte数组
        byte[] bytes = Base64.decode(encStr);
        //对byte数组进行解密
        byte[] decrypt = rsa.decrypt(bytes, KeyType.PrivateKey);
        //解密内容生成字符串
        System.out.println(StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8));

        Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8));
    }

4. 解密

  RSA rsa = new RSA(privateKey, null);
        //加密后base64处理用于网络传输
        byte[] bytes = Base64.decode(params.get("encrypt"));
        //对byte数组进行解密
        byte[] decrypt = rsa.decrypt(bytes, KeyType.PrivateKey);
        //解密内容生成字符串
        JSONObject jo = JSONObject.parseObject(StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8));

 

5. 私钥签名, 公钥验签

 secureUtil.sign生成sign对象, sign对象签名

byte[] encrypt = rsa.encrypt(aByte, KeyType.PublicKey);
        Sign sign = SecureUtil.sign(SignAlgorithm.SHA256withRSA, rsa.getPrivateKey().getEncoded(),null);
//签名
        byte[] signed = sign.sign(encrypt);
//验证签名
        Sign sign2 = SecureUtil.sign(SignAlgorithm.SHA256withRSA, null,rsa.getPublicKey().getEncoded());
        boolean verify = sign2.verify(encrypt, signed);
        System.out.println("验签-->"+verify);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值