美文网首页
代码收集之android--AESHelper

代码收集之android--AESHelper

作者: 盼月伤情 | 来源:发表于2016-12-24 21:03 被阅读0次
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import javax.crypto.Cipher;
    import javax.crypto.spec.SecretKeySpec;
    
    ///** AES对称加密解密类 **/
    public class AESHelper {
    
        // /** 算法/模式/填充 **/
        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 void encryptFile(byte[] sourceFilePath, byte[] destFilePath, String password) {
    
            File sourceFile = new File(new String(sourceFilePath));
            File destFile = new File(new String(destFilePath));
    
            if (destFile.exists()) {
                destFile.delete();
            }
            FileInputStream fis = null;
            FileOutputStream fos = null;
            try {
                fis = new FileInputStream(sourceFile);
                fos = new FileOutputStream(destFile);
    
                byte[] sources = new byte[(int) sourceFile.length()];
    
                fis.read(sources);
                byte[] dests = encrypt(sources, password);
                fos.write(dests);
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        public static void decryptFile(byte[] sourceFilePath, byte[] destFilePath, String password) {
            File sourceFile = new File(new String(sourceFilePath));
            File destFile = new File(new String(destFilePath));
    
            if (destFile.exists()) {
                destFile.delete();
            }
    
            FileInputStream fis = null;
            FileOutputStream fos = null;
    
            try {
                fis = new FileInputStream(sourceFile);
                fos = new FileOutputStream(destFile);
    
                fis = new FileInputStream(sourceFile);
                fos = new FileOutputStream(destFile);
    
                byte[] sources = new byte[(int) sourceFile.length()];
    
                fis.read(sources);
                byte[] dests = decrypt(sources, password);
                fos.write(dests);
    
            } catch (Exception e) {
              e.printStackTrace();
            } finally {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        // /** 加密字节数据 **/
        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--AESHelper

          本文链接:https://www.haomeiwen.com/subject/hvtquttx.html