主题
加密解密与数据安全工具指南
依赖检查
使用前确认项目已引入 digitalhainan-tools 依赖:
xml
<dependency>
<groupId>cn.com.digitalhainan</groupId>
<artifactId>digitalhainan-tools</artifactId>
<version>${digitalhainan.version}</version>
</dependency>工具类索引
| 工具类 | 功能 | 参考文档 |
|---|---|---|
| AESUtils | AES 加密解密 | crypto-utils.md |
| RSAUtils | RSA 公钥/私钥加密解密 | crypto-utils.md |
| SM4Utils | 国密 SM4 加密解密(ECB/CBC) | crypto-utils.md |
| Md5Utils | MD5 哈希 | crypto-utils.md |
| Sha256Utils | SHA256 哈希 | crypto-utils.md |
| DesensitizeUtils | 数据脱敏(身份证/手机号/姓名/邮箱) | desensitize-utils.md |
| IdNoUtils | 身份证号校验和信息提取 | idno-utils.md |
场景选择速查
| 场景 | 推荐工具类 | 说明 |
|---|---|---|
| 对称加密(AES) | AESUtils | AES/CBC/PKCS5Padding,默认 IV 和密钥已内置 |
| 非对称加密(RSA) | RSAUtils | 支持公钥加密、私钥解密、加盐模式 |
| 国密对称加密(SM4) | SM4Utils | 支持 ECB 和 CBC 模式 |
| 密码哈希 | Md5Utils / Sha256Utils | MD5(32位小写)、SHA256 |
| 身份证号脱敏 | DesensitizeUtils | 保留前3后4 |
| 手机号脱敏 | DesensitizeUtils | 保留前3后4 |
| 姓名脱敏 | DesensitizeUtils | 根据长度自动处理 |
| 邮箱脱敏 | DesensitizeUtils | 保留首字母和域名 |
| 身份证号校验 | IdNoUtils | 支持15位和18位 |
| 提取身份证性别 | IdNoUtils | 返回 M/F |
| 提取身份证出生日期 | IdNoUtils | 返回 LocalDate |
快速示例
AES 加解密
java
import cn.com.digitalhainan.tools.secret.AESUtils;
String plainText = "敏感数据123";
String key = "8192553d3db81630";
String encrypted = AESUtils.encrypt(plainText, key);
String decrypted = AESUtils.decrypt(encrypted, key);国密 SM4 加解密
java
import cn.com.digitalhainan.tools.secret.SM4Utils;
SM4Utils sm4 = new SM4Utils();
String encrypted = sm4.encryptData_ECB(plainText, key);
String decrypted = sm4.decryptData_ECB(encrypted, key);数据脱敏
java
import cn.com.digitalhainan.tools.DesensitizeUtils;
String maskedIdNo = DesensitizeUtils.desensitizeIdNoFirstThreeLastFour(idNo);
String maskedPhone = DesensitizeUtils.desensitizePhoneFirstThreeLastFour(phone);
String maskedName = DesensitizeUtils.desensitizeNameFirstOneLastOne(name);身份证号校验
java
import cn.com.digitalhainan.tools.IdNoUtils;
boolean valid = IdNoUtils.isIDNumber(idNo);
String gender = IdNoUtils.getGenderFromIdNo(idNo);
LocalDate birthday = IdNoUtils.getBirthdayFromIdNo(idNo);Do's and Don'ts
| Do(推荐做法) | Don't(避免做法) |
|---|---|
| 生产环境密钥通过配置中心或环境变量注入 | 将密钥硬编码在代码中 |
使用 SM4Utils 处理国密合规场景 | 在需要国密合规时使用 AES/RSA |
| 服务端完成数据脱敏后再返回给前端 | 返回全量敏感数据由前端脱敏 |
身份证号校验使用 IdNoUtils.isIDNumber() | 手写正则校验身份证号 |
参考文档
| 文档 | 内容 |
|---|---|
| crypto-utils.md | AES/RSA/SM4/MD5/SHA256 完整使用示例 |
| desensitize-utils.md | 身份证/手机号/姓名/邮箱脱敏示例 |
| idno-utils.md | 身份证号校验、性别提取、出生日期提取 |
