package com.team.zhuoke.utils; import android.util.Base64; import java.security.MessageDigest; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; /** * @author: 范建海 * @createTime: 2016/10/30 14:24 * @className: AESUtil * @description: AES加解密 BASE64是为了避免:javax.crypto.IllegalBlockSizeException: last block incomplete in decryption * @changed by: */ public class AESUtil { private SecretKeySpec skeySpec; private Cipher cipher; public AESUtil(byte[] keyraw) throws Exception { if (keyraw == null) { byte[] bytesOfMessage = "".getBytes("UTF-8"); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(bytesOfMessage); skeySpec = new SecretKeySpec(bytes, "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); } else { skeySpec = new SecretKeySpec(keyraw, "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); } } public AESUtil(String passphrase) throws Exception { byte[] bytesOfMessage = passphrase.getBytes("UTF-8"); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] thedigest = md.digest(bytesOfMessage); skeySpec = new SecretKeySpec(thedigest, "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); } public AESUtil() throws Exception { byte[] bytesOfMessage = "".getBytes("UTF-8"); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] thedigest = md.digest(bytesOfMessage); skeySpec = new SecretKeySpec(thedigest, "AES"); skeySpec = new SecretKeySpec(new byte[16], "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); } /** * 加密:先AES再base64 * * @param plaintext * @return * @throws Exception */ public String encrypt(String plaintext) throws Exception { cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] ciphertext = cipher.doFinal(plaintext.getBytes("UTF-8")); return Base64.encodeToString(ciphertext, Base64.DEFAULT); } /** * 解密:先base64再AES * * @param ciphertext * @return * @throws Exception */ public String decrypt(String ciphertext) throws Exception { cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] plain64text = Base64.decode(ciphertext, Base64.DEFAULT); byte[] plaintext = cipher.doFinal(plain64text); return new String(plaintext, "UTF-8"); } }