一个 AES 加解密工具类

来源:互联网 发布:同花顺数据接口教程 编辑:程序博客网 时间:2024/06/05 20:03
import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import java.nio.charset.Charset;import java.security.SecureRandom;public class AESUtil {    //用户密钥    private static byte[] keyValue = new byte[] {22, 25, -35, -45, 25, 98, -55, -45, 10, 35, -45, 25, 26, -95, 25,            -65, -78, -99, 85, 45, -62, 10, -0, 11, -35, 48, -98, 65, -32, 14, -78, 25, 36, -56, -45, -45, 12, 15,            -35, -75, 15, -14, 62, -25, 33, -45, 55, 68, -88};    private static Charset charset = Charset.forName("UTF-8");    private static String cipher = "AES";    private static SecretKey secretKey;    static {        try {            KeyGenerator keyGenerator = KeyGenerator.getInstance(cipher);            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");            secureRandom.setSeed(keyValue);            keyGenerator.init(128, secureRandom);            secretKey = keyGenerator.generateKey();        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 加密     */    public static String encrypt(String msg) throws Exception {        Cipher c = Cipher.getInstance(cipher);        c.init(Cipher.ENCRYPT_MODE, secretKey);        //加密并转换成16进制字符串        return asHex(c.doFinal(msg.getBytes(charset)));    }    /**     * 解密     */    public static String decrypt(String value) throws Exception {        Cipher c = Cipher.getInstance(cipher);        c.init(Cipher.DECRYPT_MODE, secretKey);        return new String(c.doFinal(asBin(value)), charset);    }    /**     * 将字节数组转换成16进制字符串     */    private static String asHex(byte buf[]) {        StringBuffer sb = new StringBuffer(buf.length * 2);        int i;        for (i = 0; i < buf.length; i++) {            if (((int) buf[i] & 0xff) < 0x10)//小于十前面补零                  sb.append("0");            sb.append(Long.toString((int) buf[i] & 0xff, 16));        }        return sb.toString();    }    /**     * 将16进制字符串转换成字节数组     */    private static byte[] asBin(String src) {        if (src.length() < 1) return null;        byte[] encrypted = new byte[src.length() / 2];        for (int i = 0; i < src.length() / 2; i++) {            int high = Integer.parseInt(src.substring(i * 2, i * 2 + 1), 16);//取高位字节              int low = Integer.parseInt(src.substring(i * 2 + 1, i * 2 + 2), 16);//取低位字节              encrypted[i] = (byte) (high * 16 + low);        }        return encrypted;    }    public static void main(String[] args) throws Exception {        for (int i = 0; i < 1000; i++) {            new Thread(new Runnable() {                @Override                public void run() {                    try {                        String enc = encrypt("aaa1");                        System.out.println("解密:" + enc);                        String decrypt = decrypt(enc);                        System.out.println("解密:" + decrypt);                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }).start();        }    }}  

0 0
原创粉丝点击