Android加密篇 AES

Posted 彭老希

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android加密篇 AES相关的知识,希望对你有一定的参考价值。

AES加密是一种高级加密标准,是一种区块加密标准。它是一个对称密码,就是说加密和解密用相同的密钥。WPA/WPA2经常用的加密方式就是AES加密算法。

import java.io.UnsupportedEncodingException;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class AESUtils3 
    /*   算法/模式/填充 */
    private static final String CipherMode = "AES/ECB/PKCS5Padding";

    /*  创建密钥  */
    private static SecretKeySpec createKey(String password) 
        byte[] data = null;
        if (password == null) 
            password = "";
        
        StringBuffer sb = new StringBuffer(32);
        sb.append(password);
        while (sb.length() < 32) 
            sb.append("0");
        
        if (sb.length() > 32) 
            sb.setLength(32);
        

        try 
            data = sb.toString().getBytes("UTF-8");
         catch (UnsupportedEncodingException e) 
            e.printStackTrace();
        
        return new SecretKeySpec(data, "AES");
    

    /* 加密字节数据  */
    public static byte[] encrypt(byte[] content, String password) 
        try 
            SecretKeySpec key = createKey(password);
            System.out.println(key);
            Cipher cipher = Cipher.getInstance(CipherMode);
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] result = cipher.doFinal(content);
            return result;
         catch (Exception e) 
            e.printStackTrace();
        
        return null;
    

    /*加密(结果为16进制字符串)  */
    public static String encrypt(String content, String password) 
        byte[] data = null;
        try 
            data = content.getBytes("UTF-8");
         catch (Exception e) 
            e.printStackTrace();
        
        data = encrypt(data, password);
        String result = byte2hex(data);
        return result;
    

    /*解密字节数组*/
    public static byte[] decrypt(byte[] content, String password) 
        try 
            SecretKeySpec key = createKey(password);
            Cipher cipher = Cipher.getInstance(CipherMode);
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] result = cipher.doFinal(content);
            return result;
         catch (Exception e) 
            e.printStackTrace();
        
        return null;
    

    /*解密16进制的字符串为字符串  */
    public static String decrypt(String content, String password) 
        byte[] data = null;
        try 
            data = hex2byte(content);
         catch (Exception e) 
            e.printStackTrace();
        
        data = decrypt(data, password);
        if (data == null) return null;
        String result = null;
        try 
            result = new String(data, "UTF-8");
         catch (UnsupportedEncodingException e) 
            e.printStackTrace();
        
        return result;
    

    /*字节数组转成16进制字符串  */
    public static String byte2hex(byte[] b)  // 一个字节的数,
        StringBuffer sb = new StringBuffer(b.length * 2);
        String tmp = "";
        for (int n = 0; n < b.length; n++) 
            // 整数转成十六进制表示
            tmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
            if (tmp.length() == 1) 
                sb.append("0");
            
            sb.append(tmp);
        
        return sb.toString().toUpperCase(); // 转成大写
    

    /*将hex字符串转换成字节数组 */
    private static byte[] hex2byte(String inputString) 
        if (inputString == null || inputString.length() < 2) 
            return new byte[0];
        
        inputString = inputString.toLowerCase();
        int l = inputString.length() / 2;
        byte[] result = new byte[l];
        for (int i = 0; i < l; ++i) 
            String tmp = inputString.substring(2 * i, 2 * i + 2);
            result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF);
        
        return result;
    

以上是关于Android加密篇 AES的主要内容,如果未能解决你的问题,请参考以下文章

Android数据加密之Aes加密

AES加密 在PC上和Android上不一样 怎么解决

我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密

[Android Pro] AES加密

Android 加密/解密问题 (AES)

Android AES 加密解密