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

 
原文地址:https://www.cnblogs.com/lizm166/p/12193241.html