import android.util.Base64; import java.io.UnsupportedEncodingException; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; /** * dns加密 */ public class DESUtils { public static byte[] encrypt(String data, String key, String charset, String transformMode, String transformPadding, byte[] iv) throws Exception { return encrypt(stringToByte(data, charset), key, transformMode, transformPadding, iv); } public static String encryptByte64(String data, String key, String charset, String transformMode, String transformPadding, byte[] iv) throws Exception { return Base64.encodeToString(encrypt(data, key, charset, transformMode, transformPadding, iv), Base64.DEFAULT); } public static String encryptByte64(byte[] data, String key, String transformMode, String transformPadding, byte[] iv) throws Exception { return Base64.encodeToString(encrypt(data, key, transformMode, transformPadding, iv), Base64.DEFAULT); } /** * @param data 数据 * @param key 秘钥 * @param transformMode 填充模式 ECB、CBC、CTR、OFB、CFB * @param transformPadding 填充 PKCS7Padding、PKCS5Padding、NoPadding * @param iv 偏移 * @return hex */ public static byte[] encrypt(byte[] data, String key, String transformMode, String transformPadding, byte[] iv) throws Exception { DESKeySpec desKey = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //密钥 SecretKey secretKey = keyFactory.generateSecret(desKey); //转换类型 String transform = "DES/" + transformMode + "/" + transformPadding; Cipher mCipher = Cipher.getInstance(transform); if (null != iv) { //偏移向量 AlgorithmParameterSpec mIv = new IvParameterSpec(iv); mCipher.init(Cipher.ENCRYPT_MODE, secretKey, mIv); } else { mCipher.init(Cipher.ENCRYPT_MODE, secretKey); } return mCipher.doFinal(data); } /** * @param data 数据 * @param key 秘钥 * @param transformMode 填充模式 ECB、CBC、CTR、OFB、CFB * @param transformPadding 填充 PKCS7Padding、PKCS5Padding、NoPadding * @param iv 偏移 */ public static byte[] decrypt(byte[] data, String key, String transformMode, String transformPadding, byte[] iv) throws Exception { DESKeySpec desKey = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //密钥 SecretKey secretKey = keyFactory.generateSecret(desKey); //转换类型 String transform = "DES/" + transformMode + "/" + transformPadding; Cipher mCipher = Cipher.getInstance(transform); if (null != iv) { //偏移向量 AlgorithmParameterSpec mIv = new IvParameterSpec(iv); mCipher.init(Cipher.DECRYPT_MODE, secretKey, mIv); } else { mCipher.init(Cipher.DECRYPT_MODE, secretKey); } return mCipher.doFinal(data); } public static String decryptByte64(byte[] data, String key, String transformMode, String transformPadding, byte[] iv) throws Exception { return Base64.encodeToString(decrypt(data, key, transformMode, transformPadding, iv), Base64.DEFAULT); } public static byte[] decrypt(String data, String key, String charset, String transformMode, String transformPadding, byte[] iv) throws Exception { return decrypt(stringToByte(data, charset), key, transformMode, transformPadding, iv); } public static String decryptByte64(String data, String key, String charset, String transformMode, String transformPadding, byte[] iv) throws Exception { return Base64.encodeToString(decrypt(data, key, charset, transformMode, transformPadding, iv), Base64.DEFAULT); } public static byte[] stringToByte(String data, String charset) throws UnsupportedEncodingException { return data.getBytes(charset); } }
使用:
String data="hello2022.";
try {
String byte64 = DESUtils.encryptByte64(data, data, "utf-8", "CBC", "PKCS7Padding", DESUtils.stringToByte(data,"utf-8"));
Log.e("--------", "MainActivity:onCreate-----> "+byte64);
} catch (Exception e) {
e.printStackTrace();
}