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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Hutool是一个Java工具包,其中包括了许多常用的工具类和方法。 要使用Hutool进行公钥加密私钥解密,需要使用Java Cryptography Extension (JCE)提供的加密算法,同时需要使用Bouncy Castle提供的加密库。 下面是一个简单的示例代码,用于使用Hutool进行公钥加密私钥解密: ```java import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; public class HutoolRSAExample { public static void main(String[] args) throws Exception { String plaintext = "Hello World!"; // 生成RSA密钥对 RSA rsa = new RSA(); String publicKey = rsa.getPublicKeyBase64(); String privateKey = rsa.getPrivateKeyBase64(); System.out.println("公钥:" + publicKey); System.out.println("私钥:" + privateKey); // 使用公钥加密 RSA rsaPublic = new RSA(publicKey, null); byte[] encrypted = rsaPublic.encrypt(plaintext.getBytes(), KeyType.PublicKey); System.out.println("加密后:" + new String(encrypted)); // 使用私钥解密 RSA rsaPrivate = new RSA(null, privateKey); byte[] decrypted = rsaPrivate.decrypt(encrypted, KeyType.PrivateKey); System.out.println("解密后:" + new String(decrypted)); } } ``` 在上面的示例代码中,我们首先生成了RSA密钥对,并打印出了公钥和私钥。 然后,我们使用公钥对明文进行加密,并打印出了加密后的密文。 最后,我们使用私钥对密文进行解密,并打印出了解密后的明文。 需要注意的是,RSA算法在加密时只支持加密数据块长度小于等于密钥长度减去11字节的数据,因此,如果要加密的数据比较长,需要分块加密。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值