android aes加密解密_java实现AES的五种加密模式

Android (2) 2024-05-25 08:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说android aes加密解密_java实现AES的五种加密模式,希望能够帮助你!!!。

android aes加密解密_java实现AES的五种加密模式_https://bianchenghao6.com/blog_Android_第1张

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;
    }
}

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复