微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

}


加密后的数据如何进行模糊查询?

原文地址:https://www.jb51.cc/wenti/3282995.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐