Mave依赖

<dependency>
  <groupId>cn.hutool</groupId>
  <artifactId>hutool-all</artifactId>
  <version>5.6.5</version>
</dependency>

hutool简介

hutool提供了如下几个核心组件:
组件 说明
hutool-core 核心,包括Bean操作、日期、各种Util等
hutool-aop JDK动态代理封装,提供非IOC下的切面支持
hutool-bloomFilter 布隆过滤,提供一些Hash算法的布隆过滤
hutool-cache 缓存
hutool-cron 定时任务模块,提供类Crontab表达式的定时任务
hutool-crypto 加密解密模块
hutool-db JDBC封装后的数据操作,基于ActiveRecord思想
hutool-dfa 基于DFA模型的多关键字查找
hutool-extra 扩展模块,对第三方封装(模板引擎、邮件等)
hutool-http 基于HttpUrlConnection的Http客户端封装
hutool-log 自动识别日志实现的日志门面
hutool-script 脚本执行封装,例如Javascript
hutool-setting 功能更强大的Setting配置文件和Properties封装
hutool-system 系统参数调用封装(JVM信息等)
hutool-json JSON实现
hutool-captcha 图片验证码实现

示例:Hutool加解密

public class CryptoTest {
    //摘要加密算法
    @Test
    public void fun1() {
        //获取摘要
        //MD5
        String testStr = "5393554e94bf0eb6436f240a4fd71282";
        //方式一
        Digester md5 = new Digester(DigestAlgorithm.MD5);
        String str = md5.digestHex(testStr);
        System.out.println(str);   //c3b68dca7f530043db5590f8c5e53a1a

        //方式二
        String string = DigestUtil.md5Hex(testStr);
        System.out.println(string);  //c3b68dca7f530043db5590f8c5e53a1a
    }

    //非对称加密
    @Test
    public void fun2() {
        //非对称加密
        RSA rsa = new RSA();
        //获得私钥
        rsa.getPrivateKey();
        rsa.getPrivateKeyBase64();
        //获得公钥
        rsa.getPublicKey();
        rsa.getPublicKeyBase64();

        //公钥加密,私钥加密
        byte[] encrypt = rsa.encrypt(StrUtil.bytes("RAS测试", CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
        byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey);
        String encode = Base64.encode(decrypt);
        System.out.println(encode);   //UkFT5rWL6K+V
        //单元测试
        // Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.UTF_8));
        //私钥加密,公钥解密
        byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("RAS测试", CharsetUtil.CHARSET_UTF_8), KeyType.PrivateKey);
        byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey);
        String encode2 = Base64.encode(decrypt2);
        System.out.println(encode2);   //UkFT5rWL6K+V
    }

    @Test
    public void fun4(){
        String content ="asdf1234";
        byte[] key = "hahaaha".getBytes();
        //构建
        SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
        //加密
        byte[] encrypt = aes.encrypt(content);
        //解密
        byte[] decrypt = aes.decrypt(encrypt);
    }
    //对称加密
    @Test
    public void fun3() {
        //第一种:以AES算法
        String content = "test中文";
        //随机生成密钥
        byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
        //构建
        SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
        //加密
        byte[] encrypt = aes.encrypt(content);
        //解密
        byte[] decrypt = aes.decrypt(encrypt);

        //加密16进制表示
        String encryptHex = aes.encryptHex(content);
        System.out.println("AES加密16进制表示:" + encryptHex);   //46953def8ec02e21f7c9bb4405243a70
        //解密为字符串
        String decryptStr = aes.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
        System.out.println("AES解密为字符串:" + decryptStr);  //test中文

        //第二种 DESede加密
        String content2 = "test中文";
        byte[] key2 = SecureUtil.generateKey(SymmetricAlgorithm.DESede.getValue()).getEncoded();
        SymmetricCrypto des = new SymmetricCrypto(SymmetricAlgorithm.DESede, key2);
        //加密
        byte[] encrypt2 = des.encrypt(content2);
        //解密
        byte[] decrypt2 = des.decrypt(encrypt2);

        //加密为16进制字符串(Hex表示)
        String encryptHex2 = des.encryptHex(content2);
        System.out.println("DESede加密16进制表示:" + encryptHex2);  //fcedfe2478d3e65b1a525d60676a6d88
        String decryptStr2 = des.decryptStr(encryptHex2);
        System.out.println("DESede解密为字符串:" + decryptStr2);   //test中文

        //第三种AES封装
        String content3 = "test中文";
        //随机生成密钥
        byte[] key3 = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
        //构建
        AES aes3 = SecureUtil.aes(key3);
        //加密
        byte[] encrypt3 = aes3.encrypt(content3);
        //解密
        byte[] decrypt3 = aes3.decrypt(encrypt3);
        //加密为16进制表示
        String encryptHex3 = aes3.encryptHex(content3);
        System.out.println("AES封装加密16进制表示:" + encryptHex3);  //7300c26ae4081f9d9bd2395b9390f9ec
        //解密为字符串
        String decryptStr3 = aes3.decryptStr(encryptHex3, CharsetUtil.CHARSET_UTF_8);
        System.out.println("AES封装解密为字符串:" + decryptStr3);  //test中文
    }
}