package cn.mutils.core.crypto;
import android.annotation.SuppressLint;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import cn.mutils.core.text.StringUtil;
/**
* AES encrypt and decrypt
*/
@SuppressLint("GetInstance")
@SuppressWarnings("unused")
public class AESUtil {
public static final String ALGORITHM = "AES";
public static final String CIPHER_ECB = "AES/ECB/PKCS5Padding";
public static final String CIPHER_CBC = "AES/CBC/PKCS5Padding";
public static final String CIPHER_CBC_NO_PADDING = "AES/CBC/NoPadding";
public static String encrypt(String text, String pwd) {
try {
Cipher cipher = Cipher.getInstance(CIPHER_ECB);
cipher.init(Cipher.ENCRYPT_MODE, generateKey(pwd));
byte[] encrypt = cipher.doFinal(text.getBytes("UTF-8"));
return StringUtil.toHex(encrypt);
} catch (Exception e) {
return null;
}
}
public static String decrypt(String text, String pwd) {
try {
Cipher cipher = Cipher.getInstance(CIPHER_ECB);
cipher.init(Cipher.DECRYPT_MODE, generateKey(pwd));
byte[] decrypt = cipher.doFinal(StringUtil.toBytes(text));
return new String(decrypt, "UTF-8");
} catch (Exception e) {
return null;
}
}
protected static Key generateKey(String pwd) throws Exception {
return new SecretKeySpec(StringUtil.md5(pwd.getBytes("UTF-8")), ALGORITHM);
}
}