码迷,mamicode.com
首页 > 编程语言 > 详细

AES算法

时间:2020-06-28 15:38:25      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:except   data   else   secret   数据   equals   amp   解密   byte   

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

 

AES算法

标签:except   data   else   secret   数据   equals   amp   解密   byte   

原文地址:https://www.cnblogs.com/wangpengpeng/p/13202757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!