Java:Hutool工具箱之Hutool-crypto加密解密

简介: Java:Hutool工具箱之Hutool-crypto加密解密

image.png

文档

目录

重点单词:

symmetric [sɪ'metrɪk] adj. 对称的
asymmetric [ˌeɪsɪˈmetrɪk] adj. 不对称
digest [daɪˈdʒest] n. 摘要

摘自文档

加密分为三种:
对称加密(symmetric),例如:AES、DES等
非对称加密(asymmetric),例如:RSA、DSA等
摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等
hutool-crypto针对这三种加密类型分别封装,并提供常用的大部分加密算法。
对于非对称加密,实现了:
RSA
DSA
对于对称加密,实现了:
AES
ARCFOUR
Blowfish
DES
DESede
RC2
PBEWithMD5AndDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_40
对于摘要算法实现了:
MD2
MD5
SHA-1
SHA-256
SHA-384
SHA-512
HmacMD5
HmacSHA1
HmacSHA256
HmacSHA384
HmacSHA512
其中,针对常用到的算法,模块还提供SecureUtil工具类用于快速实现加密。

依赖

<dependency>
   <groupId>cn.hutool</groupId>
    <artifactId>hutool-crypto</artifactId>
    <version>5.8.10</version>
</dependency>

1、摘要算法 digest

以MD5 为例

package com.mouday;
import cn.hutool.crypto.SecureUtil;
public class Demo {
    public static void main(String[] args) {
        String s = SecureUtil.md5("666");
        System.out.println(s);
        // fae0b27c451c728867a567e8c1bb4e53
    }
}

2、对称加密 symmetric

以AES 加密为例

package com.mouday;
import cn.hutool.crypto.KeyUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
public class Demo {
    public static void main(String[] args) {
        // 16位自定义密码
        String key = "1234567891011123";
        String content = "明文";
        // 生成密钥
        byte[] byteKey = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), key.getBytes()).getEncoded();
        SymmetricCrypto aes = SecureUtil.aes(byteKey);
        // 加密
        String encryptData = aes.encryptBase64(content);
        System.out.println(encryptData);
        // nuP9GXvHgzW6Q12notB8jQ==
        // 解密
        String decryptData = aes.decryptStr(encryptData);
        System.out.println(decryptData);
        // 明文
    }
}

这里有个问题,如果秘钥长度不够16位,会报错

Exception in thread "main" cn.hutool.crypto.CryptoException: 
InvalidKeyException: Invalid AES key length: 15 bytes

长度只能是16位,24位,32位

interface AESConstants {
    int AES_BLOCK_SIZE = 16;
    int[] AES_KEYSIZES = new int[]{16, 24, 32};
}

参考

https://toscode.gitee.com/dromara/hutool/issues/I4O1EB

3、不对称加密 asymmetric

以RSA为例

package com.mouday;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
public class Demo {
    public static void main(String[] args) {
        String content = "明文";
        // 当使用无参构造方法时,Hutool将自动生成随机的公钥私钥密钥对:
        RSA rsa = SecureUtil.rsa();
        // 获得私钥
        rsa.getPrivateKey();
        rsa.getPrivateKeyBase64();
        // 获得公钥
        rsa.getPublicKey();
        rsa.getPublicKeyBase64();
        // 私钥加密
        String encryptData = rsa.encryptBase64(content, KeyType.PrivateKey);
        System.out.println(encryptData);
        // BigHAtzA/JtjgnLR6MLJ32qvWCC5+B0c6Un+r34zeZ/dygWsWlu8zAEdfr7kfcuF3C1gvevUjV844xi2huzL6x0HqlefmGF/XirUuxPVqJYHzSpzRXGUXK0qaRC1n/fDK3uqEkzy1nfKsnhR2aHVJmVe7BZtjrKsAeClgUzCFJI=
        // 公钥加密
        String decryptData = rsa.decryptStr(encryptData, KeyType.PublicKey);
        System.out.println(decryptData);
        // 明文
    }
}


相关文章
|
10天前
|
存储 算法 安全
如何在Java中实现加密解密
如何在Java中实现加密解密
|
10天前
|
存储 算法 安全
实现Java应用的数据加密与解密技术
实现Java应用的数据加密与解密技术
|
10天前
|
存储 安全 算法
Java中的数据加密与数字签名技术
Java中的数据加密与数字签名技术
|
17天前
|
存储 算法 安全
Java中的DES和3DES加密算法详解
Java中的DES和3DES加密算法详解
|
12天前
|
存储 安全 Java
Java中数据加密与解密的最佳实践
Java中数据加密与解密的最佳实践
|
13天前
|
算法 Java 数据处理
Java中MD5加密算法的实现
Java中MD5加密算法的实现
|
13天前
|
安全 算法 Java
Java中的数据加密与安全传输
Java中的数据加密与安全传输
|
14天前
|
算法 安全 Java
在Java中实现数据加密和解密
在Java中实现数据加密和解密
|
17天前
|
Java BI C#
技术笔记:SM4加密算法实现Java和C#相互加密解密
技术笔记:SM4加密算法实现Java和C#相互加密解密
13 0
|
4天前
|
Java 调度
Java线程的六种状态
Java线程有六种状态: 初始(NEW)、运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)、终止(TERMINATED)。
13 1