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