zoukankan      html  css  js  c++  java
  • Java AES加密解密

    package com.common.util;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.SecretKeySpec;
    
    public class AESUtil {
      
        /**
         * 解密
         *
         * @param content   密文
         * @param key 加密密码
         * @return String
         * @throws Exception 异常
         */
        public static String decode(String content, String key) throws Exception {
            byte[] arr = string2ByteArr(content);
            byte[] raw = key.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] original = cipher.doFinal(arr);
            return new String(original,"utf-8");
        }
    
        /**
         * 加密
         *
         * @param content      原文
         * @param key 加密密码
         * @return String
         * @throws Exception 异常
         */
        public static String encode(String content, String key) throws Exception {
            byte[] raw = key.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(content.getBytes("utf-8"));
            return byteArrToString(encrypted);
        }
    
        /**
         * 将字节数组转换为16进制字符串
         * @param bcd 字节数组
         * @return String
         */
        public static String byteArrToString(byte[] bcd) {
            StringBuffer s = new StringBuffer(bcd.length * 2);
            for (int i = 0; i < bcd.length; i++) {
                s.append(bcdLookup[(bcd[i] >>> 4) & 0x0f]);
                s.append(bcdLookup[bcd[i] & 0x0f]);
            }
            return s.toString();
        }
    
        /**
         * 将16进制字符串转换为字节数组
         * @param str 16进制字符串
         * @return byte[]
         */
        public static byte[] string2ByteArr(String str) {
            byte[] bytes;
            bytes = new byte[str.length() / 2];
            for (int i = 0; i < bytes.length; i++) {
                bytes[i] = (byte) Integer.parseInt(str.substring(2 * i, 2 * i + 2),16);
            }
            return bytes;
        }
    }
  • 相关阅读:
    Alink漫谈(五) : 迭代计算和Superstep
    Alink漫谈(四) : 模型的来龙去脉
    Elasticsearch索引模板-转载
    Filebeat配置文件解析-转载
    Logtash 配置文件解析-转载
    Logtash遇到的异常和注意点
    Linux中Sshd服务配置文件优化版本(/etc/ssh/sshd_config)
    运维应急方案撰写-草稿版分享
    du和df的统计结果为什么会不一样?
    全网最详细的Linux命令系列-Screen远程会话命令
  • 原文地址:https://www.cnblogs.com/li150dan/p/10921599.html
Copyright © 2011-2022 走看看