1. EncryptUtil

import android.util.Base64;import java.security.InvalidParameterException;import java.security.spec.AlgorithmParameterSpec;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;/** * AES encryption and decryption * 

* 1. key's length >= 16 * 2. iv's length > 16 * 3. "transformation": AES/CBC/PKCS5Padding * 4. iv=12(bytes) length=128(bits) * 5. iv=24(bytes) length=192(bits) * 6. iv=32(bytes) length=256(bits) *

* Created by Anter on 2018/4/11. */public class EncryptUtil { private EncryptUtil() { } /** * Base64 decode then AES decrypt * * @param data Data to decrypt * @param key Decrypt key * @param iv Decrypt key * @param transformation AES/CBC/PKCS5Padding * @return Decrypted bytes * @throws Exception Decrypt exception */ public static byte[] decryptBase64EncodeData(byte[] data, byte[] key, byte[] iv, String transformation) throws Exception { if (data == null || data.length == 0 || key == null || key.length < 16 || iv == null || iv.length < 16 || transformation == null || transformation.length() == 0) { throw (new InvalidParameterException()); } byte[] textBytes = Base64.decode(data, Base64.DEFAULT); AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv); SecretKeySpec newKey = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance(transformation); cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec); return cipher.doFinal(textBytes); } /** * AES encrypt then base64 decode * * @param data Data to encrypt * @param key Encrypt key * @param iv Encrypt key * @param transformation AES/CBC/PKCS5Padding * @return Encrypted bytes * @throws Exception Encrypt exception */ public static byte[] encryptAndBase64Encode(byte[] data, byte[] key, byte[] iv, String transformation) throws Exception { if (data == null || data.length == 0 || key == null || key.length == 0 || iv == null || iv.length == 0 || transformation == null || transformation.length() == 0) { throw (new InvalidParameterException()); } AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv); SecretKeySpec newKey = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance(transformation); cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec); return Base64.encode(cipher.doFinal(data), Base64.DEFAULT); }}

2. Usage

import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import java.util.Arrays;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.aes_btn_encryption).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {            }        });        findViewById(R.id.aes_btn_decryption).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {            }        });        // Unsupported key size: 15 bytes        // expected IV length of 16 but was 8        try {            String originalString = "Hello";            byte[] encryptedData = EncryptUtil.encryptAndBase64Encode(originalString.getBytes(), "1234567812345678".getBytes(), "1234567812345678".getBytes(), "AES/CBC/PKCS5Padding");            byte[] decryptedData = EncryptUtil.decryptBase64EncodeData(encryptedData, "1234567812345678".getBytes(), "1234567812345678".getBytes(), "AES/CBC/PKCS5Padding");            String decryptedString = new String(decryptedData);            String encryptedString = new String(encryptedData);            if (Arrays.equals(encryptedData, encryptedData)) {                Log.d("MainActivity", "onCreate: Good job!");            }            Log.d("MainActivity", "originalString = " + originalString + ", decryptedString = " + decryptedString + ", encryptedString = " + encryptedString);        } catch (Exception e) {            e.printStackTrace();        }    }}

3. 小解

  1. Android AES 加密时加密的keyiv(bytes)的长度需要>= 16
  2. 加密位数要求iv(bytes)的长度:16 =>128, 24 => 192, 32 => 256

更多相关文章

  1. DES加密解密工具类
  2. android中的加密传输
  3. Android(安卓)使用AES/CBC/PKCS7Padding 加解密字符串
  4. android JNI RSA 3DES BASE64 加解密实现
  5. Android(安卓)数据加密方法 AES DES RSA AndroidKeyStore
  6. Android中UDP发送报文
  7. Android(安卓)指纹识别(Touch ID)实例
  8. 关于AES在Android和JAVA上加密解密不能对应的问题
  9. 【Android】LitePal安装和使用

随机推荐

  1. Android中遍历文件夹、比较文件类型测试
  2. android 触摸手指动作放大和缩小图片
  3. android全屏显示
  4. Android实现文件上传功能
  5. Android(安卓)全屏
  6. android开机动画bootanimation
  7. 提示Android(安卓)dependency 'com.andro
  8. 选择框在右边的单选按钮。。
  9. android 通知Notification的使用小实例(振
  10. Android(安卓)简单视频播放器(破烂版,后续