zoukankan      html  css  js  c++  java
  • 安卓AES加密

    一:什么是AES加密
    AES高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
    这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
    AES 是一个迭代的、对称密钥分组的密码,AES算法加密强度大,执行效率高,使用简单,实际开发中建议选择AES 算法。
     
    二:AES加密安卓中的实现
    安卓中AES加密方案如下:
    安卓里面提供了2个API:SecretKeySpec和Cipher
    明文和密文,由Ciper提供加密和解密的函数
     
    三:下面看看在项目中的应用
    /**
     * Created by 磊磊tua on 2019/9/23/023.
     */
    public class AesUtils {
        public static final String VIPARA = "1234567890123456";
        public static final String bm = "UTF-8";
        public static final String password = "1234567890123456";//password 生成秘钥的关键字
    
    
        /**
         * 字节数组转化为大写16进制字符串
         *
         * @param b
         * @return
         */
        private static String byte2HexStr(byte[] b) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < b.length; i++) {
                String s = Integer.toHexString(b[i] & 0xFF);
                if (s.length() == 1) {
                    sb.append("0");
                }
    
                sb.append(s.toUpperCase());
            }
    
            return sb.toString();
        }
    
        /**
         * 16进制字符串转字节数组
         *
         * @param s
         * @return
         */
        private static byte[] str2ByteArray(String s) {
            int byteArrayLength = s.length() / 2;
            byte[] b = new byte[byteArrayLength];
            for (int i = 0; i < byteArrayLength; i++) {
                byte b0 = (byte) Integer.valueOf(s.substring(i * 2, i * 2 + 2), 16)
                        .intValue();
                b[i] = b0;
            }
    
            return b;
        }
    
    
        /**
         * AES 加密
         *
         * @param content  明文
         * @param
         * @return
         */
    
        public static String aesEncrypt(String content) {
            try {
                IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes());
                SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES");
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
                byte[] encryptedData = cipher.doFinal(content.getBytes(bm));
                // return new String(encryptedData,bm);
                return Base64.encode(encryptedData);
    //          return byte2HexStr(encryptedData);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (InvalidKeyException e) {
                e.printStackTrace();
            } catch (IllegalBlockSizeException e) {
                e.printStackTrace();
            } catch (BadPaddingException e) {
                e.printStackTrace();
            } catch (InvalidAlgorithmParameterException e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        /**
         * AES 解密
         *
         * @param content  密文
         * @param password 生成秘钥的关键字
         * @return
         */
    
        public static String aesDecrypt(String content, String password) {
            try {
                byte[] byteMi = Base64.decode(content);
    //          byte[] byteMi=  str2ByteArray(content);
                IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes());
                SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES");
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
                byte[] decryptedData = cipher.doFinal(byteMi);
                return new String(decryptedData, "utf-8");
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                e.printStackTrace();
            } catch (InvalidKeyException e) {
                e.printStackTrace();
            } catch (IllegalBlockSizeException e) {
                e.printStackTrace();
            } catch (BadPaddingException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (InvalidAlgorithmParameterException e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }
    

     注意:在ios和后台上

    VIPARA(偏移量)
    password (键值)都得统一标准 来实现多终端的解密
    public static final String VIPARA = ""; //注意需要16字符
    public static final String password = "";//password 生成秘钥的关键字。注意需要16字符

     应用项目中是关于json传输的(只要是String字符串就可以)

    Map<String, String> map = new HashMap<>();
    map.put("order_id", order_id);
    map.put("input_password", payWord);
    String aesStr = AesUtils.aesEncrypt(JsonUtil.getInstance().toJson(map));
    

      磊磊tua

     

  • 相关阅读:
    代码大全第二版-阅读笔记01
    进度日报表15
    进度日报表14
    第七周总结
    进度日报表13
    进度日报表12
    进度日报表11
    系统图表联动
    算符优先分析法
    《软件需求模式》阅读笔记(一)
  • 原文地址:https://www.cnblogs.com/widgetbox/p/11611201.html
Copyright © 2011-2022 走看看