1. 程式人生 > 其它 >Java 加密解密工具類

Java 加密解密工具類

技術標籤:演算法

使用Hutool開源工具類實現加密加密

AES加密解密

String content = "test中文";

//隨機生成金鑰
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();

//構建
AES aes = SecureUtil.aes(key);

//加密
byte[] encrypt = aes.encrypt(content);
//解密
byte[] decrypt = aes.decrypt(encrypt);

//加密為16進製表示
String encryptHex = des.encryptHex(content); //解密為原字串 String decryptStr = des.decryptStr(encryptHex);

DES加密解密

DES的使用方式與AES基本一致

String content = "test中文";

//隨機生成金鑰
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded();

//構建
DES des = SecureUtil.des(key);

//加密解密
byte
[] encrypt = des.encrypt(content); byte[] decrypt = des.decrypt(encrypt); //加密為16進位制,解密為原字串 String encryptHex = des.encryptHex(content); String decryptStr = des.decryptStr(encryptHex);

AES加密解密工具類


import lombok.extern.slf4j.Slf4j;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

/**
 * 加密解密工具類
 *
 * @author zhaoyang10
 * @date 2020/12/15
 */
@Slf4j public class AesUtil { private static final String KEY_AES = "AES"; private static final int KEY_LENGTH = 16; /** * 加密 */ public static String encrypt(String src, String key) { try { if (key == null || key.length() != KEY_LENGTH) { throw new IllegalArgumentException("金鑰長度必須是16位"); } byte[] raw = key.getBytes(); SecretKeySpec skySpec = new SecretKeySpec(raw, KEY_AES); Cipher cipher = Cipher.getInstance(KEY_AES); cipher.init(Cipher.ENCRYPT_MODE, skySpec); byte[] encrypted = cipher.doFinal(src.getBytes()); return byte2hex(encrypted); } catch (Exception e) { log.error("AES加密方法出錯", e); } return null; } public static String decrypt(String src, String key) { try { if (key == null || key.length() != KEY_LENGTH) { throw new IllegalArgumentException("金鑰長度必須是16位"); } byte[] raw = key.getBytes(); SecretKeySpec skySpec = new SecretKeySpec(raw, KEY_AES); Cipher cipher = Cipher.getInstance(KEY_AES); cipher.init(Cipher.DECRYPT_MODE, skySpec); byte[] encrypted1 = hex2byte(src); byte[] original = cipher.doFinal(encrypted1); return new String(original); } catch (Exception e) { log.error("AES解密出錯", e); } return null; } public static byte[] hex2byte(String hex) { if (hex == null) { return new byte[0]; } int l = hex.length(); int n = 2; if (l % n == 1) { return new byte[0]; } byte[] b = new byte[l / 2]; for (int i = 0; i != l / n; i++) { b[i] = (byte) Integer.parseInt(hex.substring(i * 2, i * 2 + 2), 16); } return b; } public static String byte2hex(byte[] b) { StringBuilder hs = new StringBuilder(); String tmp; for (byte value : b) { tmp = (Integer.toHexString(value & 0XFF)); if (tmp.length() == 1) { hs.append("0").append(tmp); } else { hs.append(tmp); } } return hs.toString().toUpperCase(); } public static void main(String[] args) { String content = "http://s3zz.ad.weibo.com/license/1231xxqrq3rr44q.jpg#13121121231231"; log.info("原內容 = {}", content); String encrypt = AesUtil.encrypt(content, "aWXoyC4UNb111111"); log.info("加密後 = {}", encrypt); String decrypt = AesUtil.decrypt(encrypt, "aWXoyC4UNb111111"); log.info("解密後 = {}", decrypt); } }