以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
