• [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毫秒
  • 相关阅读:
    TF-IDF
    智力题
    max{X,Y}和min{X,Y}的概率分布
    K-Means
    提高工作效率:给设计师的10条建议
    每个软件工程师都应该尝试的5件事
    CSS sprite 圆角——源代码
    比较大气的网页元素
    彩色网页变黑白色CSS代码变黑白色调!
    jquery适用技巧
  • 原文地址:https://www.cnblogs.com/0616--ataozhijia/p/5253481.html
Copyright © 2020-2023  润新知