zoukankan      html  css  js  c++  java
  • JAVA_AesCBC例子

    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    /**
    * AES 是一种可逆加密算法,对用户的敏感信息加密处理
    * 对原始数据进行AES加密后,在进行Base64编码转化;
    * 正确
    */
    public class AesCBC {
    /*已确认
    * 加密用的Key 可以用26个字母和数字组成
    * 此处使用AES-128-CBC加密模式,key需要为16位。
    */
        private static String sKey="1234567890123456";
        private static String ivParameter="1234567890123456";
        private static AesCBC instance=null;
        //private static 
        private AesCBC(){
    
        }
        public static AesCBC getInstance(){
            if (instance==null)
                instance= new AesCBC();
            return instance;
        }
        // 加密
        public String encrypt(String sSrc, String encodingFormat, String sKey, String ivParameter) throws Exception {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            byte[] raw = sKey.getBytes();
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
            byte[] encrypted = cipher.doFinal(sSrc.getBytes(encodingFormat));
            return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码。
    }
    
        // 解密
        public String decrypt(String sSrc, String encodingFormat, String sKey, String ivParameter) throws Exception {
            try {
                byte[] raw = sKey.getBytes("ASCII");
                SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
                cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
                byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original,encodingFormat);
                return originalString;
            } catch (Exception ex) {
                return null;
            }
    }
    
        public static void main(String[] args) throws Exception {
            // 需要加密的字串
            String cSrc = "123456";
            System.out.println("加密前的字串是:"+cSrc);
            // 加密
            String enString = AesCBC.getInstance().encrypt(cSrc,"utf-8",sKey,ivParameter);
            System.out.println("加密后的字串是:"+ enString);
            
            System.out.println("1jdzWuniG6UMtoa3T6uNLA==".equals(enString));
            
            // 解密
            String DeString = AesCBC.getInstance().decrypt(enString,"utf-8",sKey,ivParameter);
            System.out.println("解密后的字串是:" + DeString);
        }
    }
    

      

  • 相关阅读:
    day 66 ORM django 简介
    day 65 HTTP协议 Web框架的原理 服务器程序和应用程序
    jQuery的事件绑定和解绑 事件委托 轮播实现 jQuery的ajax jQuery补充
    background 超链接导航栏案例 定位
    继承性和层叠性 权重 盒模型 padding(内边距) border(边框) margin 标准文档流 块级元素和行内元素
    属性选择器 伪类选择器 伪元素选择器 浮动
    css的导入方式 基础选择器 高级选择器
    03-body标签中相关标签
    Java使用内存映射实现大文件的上传
    正则表达式
  • 原文地址:https://www.cnblogs.com/gisblogs/p/9210817.html
Copyright © 2011-2022 走看看