zoukankan      html  css  js  c++  java
  • DES 可逆性加密算法

    DES 可逆性加密算法

    package com.eternalinfo.encryption.common;
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    import org.apache.commons.codec.binary.Base64;
    
    /**
     * @function des 对称性算法加密 解密工具类 可逆性算法
     * @date 2020-01-15
     */
    public class DesUtils {
    
        private static final String DES="DES";
    
        /**
         * 公钥  8位以上
         */
        private static final String SECRET_KEY="X123yzq6Fzzb";
    
        /**
         * 获取秘钥对象
         * @return
         * @throws Exception
         */
        private static final SecretKey getSecretKeyFactory() throws Exception {
            SecretKeyFactory des = SecretKeyFactory.getInstance(DES);
            SecretKey secretKey = des.generateSecret(new DESKeySpec(SECRET_KEY.getBytes()));
            return secretKey;
        }
    
        /**
         * 加密
         * @param param
         * @return
         * @throws Exception
         */
        public static final String encryption(String param) {
            String str = "";
            try {
                Cipher cipher = Cipher.getInstance(DES);
                SecretKey secretKey = getSecretKeyFactory();
                cipher.init(Cipher.ENCRYPT_MODE, secretKey);
                str = new String(Base64.encodeBase64(cipher.doFinal(param.toString().getBytes())));
            } catch (Exception e) {
                e.printStackTrace();
            }
            return str;
        }
    
        /**
         * 解密
         * @param value
         * @return
         * @throws Exception
         */
        public static final String decrypt(String value) throws Exception {
            String str = "";
            try {
                Cipher cipher = Cipher.getInstance(DES);
                SecretKey secretKey = getSecretKeyFactory();
                cipher.init(Cipher.DECRYPT_MODE, secretKey);
                str = new String(cipher.doFinal(Base64.decodeBase64(value.getBytes())));
            } catch (Exception e) {
                e.printStackTrace();
            }
            return str;
        }
    
        /**
         测试
         */
        public static void main(String[] args) throws Exception {
            String key="123";
            System.out.println(" key="+key);
            //输出 key=123
            String value=DesUtils.encryption(key);
            System.out.println("encryption value="+value);
            //输出 encryption value=LDiFUdf0iew=
            System.out.println("decrypt key="+DesUtils.decrypt(value));
            //输出 decrypt key=123
    
        }
    }

    加密结果适用于url参数么?

    
    
    URLEncoder.encode();
    URLDecoder.decode() 进行转码即可
    
    

    url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?
    解决办法
    将这些字符转化成服务器可以识别的字符,对应关系如下:
    URL字符转义

    用其它字符替代吧,或用全角的。

    +    URL 中+号表示空格                            %2B   
    空格 URL中的空格可以用+号或者编码           %20 
    /     分隔目录和子目录                              %2F     
    ?     分隔实际的URL和参数                         %3F     
    %    指定特殊字符                                   %25     
    #    表示书签                                         %23     
    &    URL 中指定的参数间的分隔符                %26     
    =    URL 中指定参数的值                           %3D

     
  • 相关阅读:
    系统数据库如何恢复Master数据库
    在Orderby子句中使用CASE 语句
    SQL NOTECURSOR
    MVC 中静态文件部分动态化
    SQL NOTCTE
    Get data style from Excel
    SQL NOTPARTITION
    LAMDA表达式学习
    SQL NOTEVARIABLE
    起II6.0中使用windows2003自带的虚拟主机管理系统
  • 原文地址:https://www.cnblogs.com/lizm166/p/12193241.html
Copyright © 2011-2022 走看看