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;         
            }
  • 相关阅读:
    大一训练赛20181105-二分三分分治部分
    该说命运弄人,毫不留情。
    矩阵快速幂模板
    Final Destination II -- 矩阵快速幂模板题
    UVA -580 组合数学
    NYOJ-16-矩形嵌套 记忆化搜索
    封装标签省,市,县。三级联动
    java压缩图片设置宽高
    sql分页
    常用的正则表达式@java后台
  • 原文地址:https://www.cnblogs.com/lyon91/p/10119392.html
Copyright © 2011-2022 走看看