Base64加解密及在URL中的应用

参考:https://www.cnblogs.com/java-zhao/p/5083427.html

Base64加解密

待后续再补充。。。


在url中的应用

由于当前项目中有一个接口会返回本系统的一个链接给外围系统,这个链接里面包含一个敏感ID。要给此ID加密,被外围系统调用时再解密。

由于base64加密后的字符串会出‘+’,'=',‘\' 等字符,在URL中传输都会先经过 URLEncoder.encode(),接收方再URLDecoder.decode()。这样处理后字符串已经不是以前那个字符串了,经常提示解密失败。对于这种情况大概有两种方案:

1.在URLEncoder.encode()前先将此类字符替换成别的字符,URLDecoder.decode()前又换回去。

先看现像:

System.out.println("1\t"+InfoMapEncrypt.urlEncrypt("860005757"));
String str = URLDecoder.decode("1ckvqzaBboEWvRgb32bm4qK%2BbjbJ1eStLZrCUynFGc8%3D", "UTF-8");
System.out.println("2\t"+str);
System.out.println("3\t"+URLDecoder.decode(str, "UTF-8"));
System.out.println("4\t"+InfoMapEncrypt.urlDecrypt(str));
// 1 1ckvqzaBboEWvRgb32bm4qK%2BbjbJ1eStLZrCUynFGc8%3D
// 2 1ckvqzaBboEWvRgb32bm4qK+bjbJ1eStLZrCUynFGc8=
// 3 1ckvqzaBboEWvRgb32bm4qK bjbJ1eStLZrCUynFGc8=
// javax.crypto.BadPaddingException: Given final block not properly padded...

这个模拟的就是生产上的情况,应用服务器有时会自动转一次,这个很奇怪。如果代码里面再转一次就会出问题。为了避免这种情况可以用下面的方式补救。


// 加密
String plaintext = "1ckvqzaBboEWvRgb32bm4qK+bjbJ1eStLZrCUynFGc8="; 
String ciphertext = InfoMapEncrypt.encrypt(plaintext);
String encoder = ciphertext.replace("+", "-").replace("\"", "_");
return URLEncoder.encode(encoder, "UTF-8");

// 解密
decode = URLDecoder.decode(ciphertext, "UTF-8");
String decoder = decode.replace("-", "+").replace("_", "\"");
return InfoMapEncrypt.decrypt(decoder);

2. 使用 URLBase64 方式

参考: https://www.cnblogs.com/java-zhao/p/5083427.html


相关异常处理

sun.misc.BASE64Encoder找不到的解决方法

sun.misc.BASE64Encoder/BASE64Decoder类不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在eclipse中直接使用却找不到该类。

Base64加解密及在URL中的应用_第1张图片

** 完美解决

你可能感兴趣的:(property加密)