1. 程式人生 > >MD5 加密解密類(通過Key 對資料進行加密)直接複製使用

MD5 加密解密類(通過Key 對資料進行加密)直接複製使用

import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;

public class AesUtil {     private static final String defaultCharset = "UTF-8";     private static final String KEY_AES = "AES";     private static final String KEY_MD5 = "MD5";

    private static MessageDigest md5Digest;     static {         try {             md5Digest = MessageDigest.getInstance(KEY_MD5);         } catch (NoSuchAlgorithmException e) {             e.printStackTrace();         }     }

    /**      * 加密      * @param data      * @param key      * @return      */     public static String encrypt(String data, String key) {         return doAES(data, key, Cipher.ENCRYPT_MODE);     }          /**      * 解密      * @param data      * @param key      * @return      */     public static String decrypt(String data, String key) {         return doAES(data, key, Cipher.DECRYPT_MODE);     }

    private static String doAES(String data, String key, int mode) {         try {             boolean encrypt = mode == Cipher.ENCRYPT_MODE;             byte[] content;             //true 加密內容 false 解密內容             if (encrypt) {                 content = data.getBytes(defaultCharset);             } else {                  content = parseHexStr2Byte(data);             }             SecretKeySpec keySpec = new SecretKeySpec(md5Digest.digest(key.getBytes(defaultCharset)), KEY_AES);//構造一個金鑰             Cipher cipher = Cipher.getInstance(KEY_AES);// 建立密碼器             cipher.init(mode, keySpec);// 初始化             byte[] result = cipher.doFinal(content);//加密或解密             if (encrypt) {                 return parseByte2HexStr(result);             } else {                 return new String(result, defaultCharset);             }         } catch (Exception e) {             e.printStackTrace();         }         return null;     }

         public static String parseByte2HexStr(byte buf[]) {         StringBuilder sb = new StringBuilder();         for (int i = 0; i < buf.length; i++) {             String hex = Integer.toHexString(buf[i] & 0xFF);             if (hex.length() == 1) {                 hex = '0' + hex;             }             sb.append(hex.toUpperCase());         }         return sb.toString();     }     /**      * 將16進位制轉換為二進位制      *      * @param hexStr      * @return      */     public static byte[] parseHexStr2Byte(String hexStr) {         if (hexStr.length() < 1) {             return null;         }         byte[] result = new byte[hexStr.length() / 2];         for (int i = 0; i < hexStr.length() / 2; i++) {             int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);             int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);             result[i] = (byte) (high * 16 + low);         }         return result;     }

    public static void main(String[] args) throws Exception {

        String content = "{\"userNo\":\"000000000001\"}";                  String key = "123456";

        System.out.println("加密前:" + content);

        String encrypt = encrypt(content, key);

        System.out.println("加密後:" + encrypt);

        String decrypt = decrypt(encrypt, key);

        System.out.println("解密後:" + decrypt);              }

}