zoukankan      html  css  js  c++  java
  • AES 对称加密解密

    /*
           * 加密
           * 2.根据ecnodeRules规则初始化密钥生成器
           */
            public static String AESEncode(String encodeRules,String content){
                try {
                    //1.构造密钥生成器,指定为AES算法,不区分大小写
                    /*javax.crypto 
                                    类 KeyGenerator
                     * 此类提供(对称)密钥生成器的功能。
                     */
                    KeyGenerator keygen=KeyGenerator.getInstance("AES");
                    //2.根据ecnodeRules规则初始化密钥生成器
                    //生成一个128位的随机源,根据传入的字节数组
                    keygen.init(128, new SecureRandom(encodeRules.getBytes()));
                      //3.产生原始对称密钥
                   
                    SecretKey original_key=keygen.generateKey();
                      //4.获得原始 对称密钥 的字节数组
                    byte [] raw=original_key.getEncoded();
                    SecretKey key=new SecretKeySpec(raw, "AES");
                      //6.根据指定算法AES自成密码器
                    Cipher cipher=Cipher.getInstance("AES");
                      //7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY
                    cipher.init(Cipher.ENCRYPT_MODE, key);
                    //8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
                    byte [] byte_encode=content.getBytes("utf-8");
                    //9.根据密码器的初始化方式--加密:将数据加密
                    byte [] byte_AES=cipher.doFinal(byte_encode);
                  //10.将加密后的数据转换为字符串
                    //这里用Base64Encoder中会找不到包
                    //解决办法:
                    //在项目的Build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。
                    String AES_encode=new String(new BASE64Encoder().encode(byte_AES));
                  //11.将字符串返回
                    return AES_encode;
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //如果有错就返加nulll
                return null;         
            }
           
            /*
             * 解密
             */
            public static String AESDncode(String encodeRules,String content){
                try {
                    //1.构造密钥生成器,指定为AES算法,不区分大小写
                    KeyGenerator keygen=KeyGenerator.getInstance("AES");
                    //2.根据ecnodeRules规则初始化密钥生成器
                    //生成一个128位的随机源,根据传入的字节数组
                    keygen.init(128, new SecureRandom(encodeRules.getBytes()));
                      //3.产生原始对称密钥
                    SecretKey original_key=keygen.generateKey();
                      //4.获得原始对称密钥的字节数组
                    byte [] raw=original_key.getEncoded();
                    //5.根据字节数组生成AES密钥
                    SecretKey key=new SecretKeySpec(raw, "AES");
                      //6.根据指定算法AES自成密码器
                    Cipher cipher=Cipher.getInstance("AES");
                      //7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEY
                    cipher.init(Cipher.DECRYPT_MODE, key);
                    //8.将加密并编码后的内容解码成字节数组
                    byte [] byte_content= new BASE64Decoder().decodeBuffer(content);
                    /*
                     * 解密
                     */
                    byte [] byte_decode=cipher.doFinal(byte_content);
                    String AES_decode=new String(byte_decode,"utf-8");
                    return AES_decode;
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
                //如果有错就返加nulll
                return null;         
            }
  • 相关阅读:
    Java学习路线:day1 Java语言概述
    Java学习路线:day5 Java基本语法(下)2
    Java学习路线:day4 Java基本语法(下)
    Python笔记_第四篇_高阶编程_GUI编程之Tkinter_2.控件类
    Python笔记_第四篇_高阶编程_GUI编程之Tkinter_1.使用Python进行GUI编程的概述
    Python笔记_第三篇_面向对象_9.Python中的"get"和"set"方法(@property和@.setter)
    Python笔记_第三篇_面向对象_8.对象属性和类属性及其动态添加属性和方法
    Python笔记_第三篇_面向对象_7.多态
    Python笔记_第三篇_面向对象_6.继承(单继承和多继承)
    Python笔记_第三篇_面向对象_5.一个关于类的实例(人开枪射击子弹)
  • 原文地址:https://www.cnblogs.com/lyon91/p/10119392.html
Copyright © 2011-2022 走看看