zoukankan      html  css  js  c++  java
  • [Android Pro] AES加密

    reference to : http://blog.csdn.net/wfung_kwok/article/details/7766427

    package com.secufity.aes;
    
    import java.util.UUID;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    import com.secufity.db.Base64;
    /**
     * 
     * @author wfung_kwok
     *
     */
    public class AES {
    
        static String e = "9238513401340235";
    
        // 加密
        public static String Encrypt(String src, String key) throws Exception {
            if (key == null) {
                System.out.print("Key为空null");
                return null;
            }
            // 判断Key是否为16位
            if (key.length() != 16) {
                System.out.print("Key长度不是16位");
                return null;
            }
            byte[] raw = key.getBytes();
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式"0102030405060708
            IvParameterSpec iv = new IvParameterSpec(e.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
    
            byte[] encrypted = cipher.doFinal(src.getBytes());
    
            return Base64.encodeBytes(encrypted);
            // 此处使用BASE64做转码功能,同时能起到2次加密的作用。
        }
    
        // 解密
        public static String Decrypt(String src, String key) throws Exception {
            try {
                // 判断Key是否正确
                if (key == null) {
                    System.out.print("Key为空null");
                    return null;
                }
                // 判断Key是否为16位
                if (key.length() != 16) {
                    System.out.print("Key长度不是16位");
                    return null;
                }
                byte[] raw = key.getBytes("ASCII");
                SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                IvParameterSpec iv = new IvParameterSpec(e.getBytes());
                cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
                byte[] encrypted1 = Base64.decode(src);// 先用base64解密
                try {
                    byte[] original = cipher.doFinal(encrypted1);
                    String originalString = new String(original);
                    return originalString;
                } catch (Exception e) {
                    System.out.println(e.toString());
                    return null;
                }
            } catch (Exception ex) {
                System.out.println(ex.toString());
                return null;
            }
        }
    
        public static void main(String[] args) throws Exception {
            String key = UUID.randomUUID().toString().substring(0, 16);
            String src = "Email : wfung_kwok@xxx.com";
            System.out.println(src);
            // 加密
            long start = System.currentTimeMillis();
            String enString = AES.Encrypt(src, key);
            System.out.println("加密后的字串是:" + enString);
    
            long useTime = System.currentTimeMillis() - start;
            System.out.println("加密耗时:" + useTime + "毫秒");
    
            // 解密
            start = System.currentTimeMillis();
            String DeString = AES.Decrypt(enString, key);
            System.out.println("解密后的字串是:" + DeString);
            useTime = System.currentTimeMillis() - start;
            System.out.println("解密耗时:" + useTime + "毫秒");
        }
    }

    Console:

    Email : wfung_kwok@xxx.com
    加密后的字串是:Gkl3xEIHndI1W8CN9fKbvEM3Fzo9KJSfVvQPWRkH0WI=
    加密耗时:234毫秒
    解密后的字串是:Email : wfung_kwok@xxx.com
    解密耗时:0毫秒
  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/0616--ataozhijia/p/5253481.html
Copyright © 2011-2022 走看看