zoukankan      html  css  js  c++  java
  • android AES 加密

    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;

    /**
     * @作 用:
     * @修 改 人:
     * @日 期:
     *
     */
    public class AesUtils {
        public static final String key = "1123131313131313131313131313131313";
        /**
         * 加密
         *
         * @param clearText
         * @return
         */
        public static String encrypt(String clearText) {
            byte[] result = null;
            try {
                byte[] rawkey = getRawKey(key.getBytes());
                result = encrypt(rawkey, clearText.getBytes());
            } catch (Exception e) {
                e.printStackTrace();
            }
            String content = toHex(result);
            return content;

        }

        /**
         * 解密
         *
         * @param encrypted
         * @return
         */
        public static String decrypt(String encrypted) {
            byte[] rawKey;
            try {
                rawKey = getRawKey(key.getBytes());
                byte[] enc = toByte(encrypted);
                byte[] result = decrypt(rawKey, enc);
                String coentn = new String(result);
                return coentn;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

        /**
         * @param seed
         * @return
         * @throws Exception "RSA/None/PKCS1Padding"
         */
        private static byte[] getRawKey(byte[] seed) throws Exception {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            SecureRandom sr = null;
            if (Build.VERSION.SDK_INT > 17) {
                //加密随机数生成器
                sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");//Android4.22需要用这个
            } else {
                sr = SecureRandom.getInstance("SHA1PRNG"); //(原版)
            }
            kgen.init(128, sr);
            SecretKey sKey = kgen.generateKey();
            byte[] raw = sKey.getEncoded();
            return raw;
        }

        private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    //        Cipher cipher = Cipher.getInstance("AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(
                    new byte[cipher.getBlockSize()]));
            byte[] encrypted = cipher.doFinal(clear);
            return encrypted;
        }

        private static byte[] decrypt(byte[] raw, byte[] encrypted)
                throws Exception {
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    //        Cipher cipher = Cipher.getInstance("AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(
                    new byte[cipher.getBlockSize()]));
            byte[] decrypted = cipher.doFinal(encrypted);
            return decrypted;
        }

        public static String toHex(String txt) {
            return toHex(txt.getBytes());
        }

        public static String fromHex(String hex) {
            return new String(toByte(hex));
        }

        public static byte[] toByte(String hexString) {
            int len = hexString.length() / 2;
            byte[] result = new byte[len];
            for (int i = 0; i < len; i++)
                result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),
                        16).byteValue();
            return result;
        }

        public static String toHex(byte[] buf) {
            if (buf == null)
                return "";
            StringBuffer result = new StringBuffer(2 * buf.length);
            for (int i = 0; i < buf.length; i++) {
                appendHex(result, buf[i]);
            }
            return result.toString();
        }

        private static void appendHex(StringBuffer sb, byte b) {
            final String HEX = "0123456789ABCDEF";
            sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));
        }
    }

  • 相关阅读:
    84. Largest Rectangle in Histogram (Solution 2)
    84. Largest Rectangle in Histogram (Solution 1)
    73. Set Matrix Zeroes
    【JavaScript】Symbol 静态方法
    【JavaScript】Date
    【JavaScript】Math
    725. Split Linked List in Parts把链表分成长度不超过1的若干部分
    791. Custom Sort String字符串保持字母一样,位置可以变
    508. Most Frequent Subtree Sum 最频繁的子树和
    762. Prime Number of Set Bits in Binary Representation二进制中有质数个1的数量
  • 原文地址:https://www.cnblogs.com/zhou2016/p/5570752.html
Copyright © 2011-2022 走看看