以get方式传输base64对url特殊字符处理
当你使用以get的方式请求url传输一段用base64加密的字符时,后端接收出现各种如+/=特殊字符被转码,使得base64无法正常解密。为了避免这种情况,使其对url安全,就需要对base64encode后存在url的一些敏感字符做替换,解密时再换回。
java版本base64 url safe
你可以换成JDK里的sun.misc下的BASE64Encoder和BASE64Decoder,或其他的方式,但个人觉得这个套件的编码和解码并不太好。这里使用的是commons-codec的base64,需加入commons-codec-1.9.jar或其他版本,再引入:import org.apache.commons.codec.binary.Base64;
/** * Base64加密对url安全 * @param string 明文 * @return 密文 */ public static String encodeBase64URLSafe(String string) { return new String(Base64.encodeBase64(string.getBytes())).replace("+", "-").replace("/", "_").replace("=",""); } /** * Base64解密对url安全 * @param string 密文 * @return 明文 */ public static String decodeBase64URLSafe(String string) { String base64 = string.replace("-", "+").replace("_", "/"); int mod = base64.length() % 4; if(mod > 0) base64 += "====".substring(mod); return new String(Base64.decodeBase64(base64)); }
使用maven的加入:
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency>
其他自行下载jar:
例如:https://mvnrepository.com/artifact/commons-codec/commons-codec/1.9
php版本base64 url safe
/** * Base64加密对url安全 * @param string $string 明文 * @return string 密文 */ function base64_encode_url_safe($string) { return str_replace(array('+', '/', '='), array('-', '_', ''), base64_encode($string)); } /** * Base64解密对url安全 * @param string $string 密文 * @return string 明文 */ function base64_decode_url_safe($string) { $base64 = str_replace(array('-', '_'),array('+', '/'), $string); $mod4 = strlen($base64) % 4; if ($mod4) $base64 .= substr('====', $mod4); return base64_decode($base64); }
js版本base64 url safe
内置的window.btoa和window.atob对中文不友好,你需要引入base64.js,你可以使用第三方的base64:http://www.webtoolkit.info/javascript-base64.html
//Base64加密对url安全 function base64_encode_url_safe(string){ return Base64.encode(string).replace("+", "-").replace("/", "_").replace("=",""); } //Base64解密对url安全 function base64_decode_url_safe(string) { var base64 = string.replace("-", "+").replace("_", "/"); var mod = base64.length % 4; if(mod > 0) base64 += "====".substring(mod); return Base64.decode(base64); }
原创文章,转载请注明出处:https://www.weizhixi.com/article/111.html