1 import android.text.TextUtils;
2 import android.util.Base64;
3 import android.util.Log;
4
5 import javax.crypto.Cipher;
6 import javax.crypto.spec.IvParameterSpec;
7 import javax.crypto.spec.SecretKeySpec;
8
9 public class AESCBCUtils {
10 private static final String TAG = "AESCBCUtils";
11
12 // CBC(Cipher Block Chaining, 加密快链)模式,PKCS5Padding补码方式
13 // AES是加密方式 CBC是工作模式 PKCS5Padding是填充模式
14 /**
15 * 加解密算法/工作模式/填充方式
16 */
17 private static final String CBC_PKCS5_PADDING = "AES/CBC/PKCS5Padding";
18 // AES 加密
19 private static final String AES = "AES";
20
21 // 密钥偏移量
22 //private static final String mstrIvParameter = "1234567890123456";
23 /* key必须为16位,可更改为自己的key */
24 //String mstrTestKey = "1234567890123456";
25
26 // 加密
27 /**
28 * AES 加密
29 *
30 * @param strKey 加密密钥
31 * @param strClearText 待加密内容
32 * @param mstrIvParameter 密钥偏移量
33 * @return 返回Base64转码后的加密数据
34 */
35 public static String encrypt_AES(String strKey, String strClearText, String mstrIvParameter){
36
37 try {
38 byte[] raw = strKey.getBytes();
39 // 创建AES密钥
40 SecretKeySpec skeySpec = new SecretKeySpec(raw, AES);
41 // 创建密码器
42 Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
43 // 创建偏移量
44 IvParameterSpec iv = new IvParameterSpec(mstrIvParameter.getBytes());
45 // 初始化加密器
46 cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
47 // 执行加密操作
48 byte[] cipherText = cipher.doFinal(strClearText.getBytes());
49 //Log.d(TAG, "encrypt result(not BASE64): " + cipherText.toString());
50 String strBase64Content = Base64.encodeToString(cipherText, Base64.DEFAULT); // encode it by BASE64 again
51 //Log.d(TAG, "encrypt result(BASE64): " + strBase64Content);
52 strBase64Content = strBase64Content.replaceAll(System.getProperty("line.separator"), "");
53
54 return strBase64Content;
55 } catch (Exception e) {
56 e.printStackTrace();
57 }
58
59 return null;
60 }
61
62 // 解密
63 /**
64 * AES 解密
65 *
66 * @param strKey 解密密钥
67 * @param strCipherText 待解密内容
68 * @param mstrIvParameter 偏移量
69 * @return 返回Base64转码后的加密数据
70 */
71 public static String decrypt(String strKey, String strCipherText, String mstrIvParameter) throws Exception {
72
73 try {
74 byte[] raw = strKey.getBytes("ASCII");
75 // 创建AES秘钥
76 SecretKeySpec skeySpec = new SecretKeySpec(raw, AES);
77 // 创建密码器
78 Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
79 // 创建偏移量
80 IvParameterSpec iv = new IvParameterSpec(mstrIvParameter.getBytes());
81 // 初始化解密器
82 cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
83 // 执行解密操作
84 byte[] cipherText = Base64.decode(strCipherText, Base64.DEFAULT); // decode by BASE64 first
85 //Log.d(TAG, "BASE64 decode result(): " + cipherText.toString());
86 byte[] clearText = cipher.doFinal(cipherText);
87 String strClearText = new String(clearText);
88 //Log.d(TAG, "decrypt result: " + strClearText);
89
90 return strClearText;
91 } catch (Exception e) {
92 e.printStackTrace();
93 }
94
95 return null;
96 }
97 }
1 //密钥
2 String AESKey = "1234567890123456";
3 //偏移量
4 String AESIv = "1234567890123456";
5
6 //密码加密
7 String pwdAES = AESCBCUtils.encrypt_AES(AESKey, loginPassword.getText().toString(), AESIv);
8 //用户名加密
9 String UserNameAES = AESCBCUtils.encrypt_AES(AESKey, loginAccount.getText().toString(), AESIv);