AES加密解密代码,key是16位

来源:互联网 发布:linux 清除arp缓存 编辑:程序博客网 时间:2024/04/30 21:13
import javax.crypto.*;import javax.crypto.spec.*;public class MyAES {    public static void main(String[] args) throws Exception {        /*         * 加密用的Key 可以用26个字母和数字组成,最好不要用保留字符,虽然不会错,至于怎么裁决,个人看情况而定         */        String cKey = "1234567890abcDEF";        // 需要加密的字串        String cSrc = "LUZAIMOU";        // 加密        long lStart = System.currentTimeMillis();//        String enString = MyAES.encrypt(cSrc, cKey);//        System.out.println("加密后的字串是:" + enString);        long lUseTime = System.currentTimeMillis() - lStart;        System.out.println("加密耗时:" + lUseTime + "毫秒");        // 解密        lStart = System.currentTimeMillis();//        String DeString = MyAES.decrypt(enString, cKey);//        System.out.println("解密后的字串是:" + DeString);        lUseTime = System.currentTimeMillis() - lStart;        System.out.println("解密耗时:" + lUseTime + "毫秒");    }    public static byte[] decrypt(byte[] sSrc, String sKey) throws Exception {        try {            // 判断Key是否正确            if (sKey == null) {                System.out.print("Key为空null");                return null;            }            // 判断Key是否为16位            if (sKey.length() != 16) {                System.out.print("Key长度不是16位");                return null;            }            byte[] raw = sKey.getBytes("ASCII");            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");            Cipher cipher = Cipher.getInstance("AES");            cipher.init(Cipher.DECRYPT_MODE, skeySpec);            byte[] encrypted1 = sSrc;            try {                byte[] original = cipher.doFinal(encrypted1);                return original;            } catch (Exception e) {                System.out.println(e.toString());                return null;            }        } catch (Exception ex) {            System.out.println(ex.toString());            return null;        }    }    // 判断Key是否正确    public static byte[] encrypt(byte[] sSrc, String sKey) throws Exception {        if (sKey == null) {            System.out.print("Key为空null");            return null;        }        // 判断Key是否为16位        if (sKey.length() != 16) {            System.out.print("Key长度不是16位");            return null;        }        byte[] raw = sKey.getBytes("ASCII");        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");        Cipher cipher = Cipher.getInstance("AES");        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);        byte[] encrypted = cipher.doFinal(sSrc);        return encrypted;    }    public static byte[] parseHexStr2Byte(String strhex) {        if (strhex == null) {            return null;        }        int l = strhex.length();        if (l % 2 == 1) {            return null;        }        byte[] b = new byte[l / 2];        for (int i = 0; i != l / 2; i++) {            b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2),                    16);        }        return b;    }    public static String parseByte2HexStr(byte[] b) {        String hs = "";        String stmp = "";        for (int n = 0; n < b.length; n++) {            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));            if (stmp.length() == 1) {                hs = hs + "0" + stmp;            } else {                hs = hs + stmp;            }        }        return hs.toUpperCase();    }}