• AES算法


    AES128Bit ECB加解密算法:

    public static String Encrypt(String data,String key) throws Exception{
      byte[] raw = HexUtils.hexStr2ByteArr(key);
      SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
      Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");// "算法/模式/补码方式"
      cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
      byte[] inData = HexUtils.hexStr2ByteArr(data);
      byte[] outData = cipher.doFinal(inData);
      return HexUtils.byteArr2HexStr(outData);     
    }
    
    /**
         * 16进制字符串转字节数组,单字节(双字符)转单字节
         * 
         * @param data
         * @return
         */
        public static byte[] hexStr2ByteArr(String data) {
            if (data == null || data.equals("")) {
                return null;
            }
            data = data.toUpperCase();
            int length = data.length() / 2;
            char[] hexChars = data.toCharArray();
            byte[] d = new byte[length];
            for (int i = 0; i < length; i++) {
                int pos = i * 2;
                d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
            }
            return d;
            // 另一种写法
            // public static byte[] hexStrToByteArr(String data) {
            // if ((data == null) || (data.length() < 2))
            // return null;
            // int len = data.length() / 2;
            // byte[] buffer = new byte[len];
            // for (int i = 0; i < len; i++) {
            // buffer[i] = (byte) Integer.parseInt(data.substring(i * 2, i * 2 + 2),
            // 16);
            // }
            // return buffer;
            // }
        }
    public static String byteArr2HexStr(byte[] data) {
            String hs = "";
            String stmp = "";
            for (int n = 0; n < data.length; n++) {
                stmp = (Integer.toHexString(data[n] & 0XFF));
                if (stmp.length() == 1)
                    hs = hs + "0" + stmp + "";
                else
                    hs = hs + stmp + "";
            }
            return hs.toUpperCase();
        }
    /**
         * AES128bit ECB解密
         * 
         * @param data
         *            16进制数据,16字节整数倍
         * @param key
         *            16进制数据,16字节
         * @return
         * @throws Exception
         */
        public static String Decrypt(String data, String key) throws Exception {
            if (data.length() % 32 != 0) {
                System.out.println("数据不是16字节整数倍");
                return null;
            }
    
            if (key.length() != 32) {
                System.out.print("Key长度不是16字节");
                return null;
            }
    
            byte[] raw = HexUtils.hexStr2ByteArr(key);
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");// "算法/模式/补码方式"
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] inData = HexUtils.hexStr2ByteArr(data);
            byte[] outData = cipher.doFinal(inData);
            return HexUtils.byteArr2HexStr(outData);
        }
  • 相关阅读:
    java学习(十六):对象的自定义比较,Comparator和Comparable
    Java学习(十五):hashCode的作用
    MySQL存储过程入门教程
    MySQL,SQLServer,Oracle数据库常用字段类型
    Java学习(十四):JDBC方式连接数据库举例
    JavaScript对时间的操作方法
    Java学习(十二):Java中的常用时间操作
    Java学习(十一):Java锁Synchronized,对象锁和类锁举例
    Python基础学习9 类
    Python基础学习8 函数
  • 原文地址:https://www.cnblogs.com/wangpengpeng/p/13202757.html
Copyright © 2020-2023  润新知