android 数据加密AES

来源:互联网 发布:mac 安装python 编辑:程序博客网 时间:2024/06/05 01:03

AES是目前对称加密中最流行算法之一。随着大数据越来越重要,信息安全随之人们开始关注起来。废话不多说。讲一讲AES加密。

  1. public static byte[] encrypt(String content, String password) {  
  2.         try {             
  3.                 KeyGenerator kgen = KeyGenerator.getInstance("AES");  // 创建AES的Key生产者
  4.                 kgen.init(128new SecureRandom(password.getBytes()));  //在安全性要求比较高的场合,应当使用//SecureRandom
  5.                 SecretKey secretKey = kgen.generateKey();  //生成一个密钥
  6.                 byte[] enCodeFormat = secretKey.getEncoded();  // 返回编码格式的密钥
  7.                 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");  // 转换为AES专用密钥
  8.                 Cipher cipher = Cipher.getInstance("AES");// 创建密码器  
  9.                 byte[] byteContent = content.getBytes("utf-8");  
  10.                 cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化加密模式
  11.                 byte[] result = cipher.doFinal(byteContent);  //加密
  12.                 return result; 
  13.         } catch (NoSuchAlgorithmException e) {  
  14.                 e.printStackTrace();  
  15.         } catch (NoSuchPaddingException e) {  
  16.                 e.printStackTrace();  
  17.         } catch (InvalidKeyException e) {  
  18.                 e.printStackTrace();  
  19.         } catch (UnsupportedEncodingException e) {  
  20.                 e.printStackTrace();  
  21.         } catch (IllegalBlockSizeException e) {  
  22.                 e.printStackTrace();  
  23.         } catch (BadPaddingException e) {  
  24.                 e.printStackTrace();  
  25.         }  
  26.         return null;  
  27. }  

下面是解密的过程基本都差不多
  1. public static byte[] decrypt(byte[] content, String password) {  
  2.         try {  
  3.                  KeyGenerator kgen = KeyGenerator.getInstance("AES");  
  4.                  kgen.init(128new SecureRandom(password.getBytes()));  
  5.                  SecretKey secretKey = kgen.generateKey();  
  6.                  byte[] enCodeFormat = secretKey.getEncoded();  
  7.                  SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");              
  8.                  Cipher cipher = Cipher.getInstance("AES");// 创建密码器  
  9.                 cipher.init(Cipher.DECRYPT_MODE, key);// 初始化  
  10.                 byte[] result = cipher.doFinal(content);  
  11.                 return result; // 加密  
  12.         } catch (NoSuchAlgorithmException e) {  
  13.                 e.printStackTrace();  
  14.         } catch (NoSuchPaddingException e) {  
  15.                 e.printStackTrace();  
  16.         } catch (InvalidKeyException e) {  
  17.                 e.printStackTrace();  
  18.         } catch (IllegalBlockSizeException e) {  
  19.                 e.printStackTrace();  
  20.         } catch (BadPaddingException e) {  
  21.                 e.printStackTrace();  
  22.         }  
  23.         return null;  

主要是种子一定是一样的。才能正确的加解密。而且如果是用字节转换为字符串形式加解密的话,会报异常。这里就要用到二进制转换为16进制的,
然后间接转换为2进制的解密。