以get方式传输base64对url特殊字符处理

知兮丶青 加密 · 解密 · 函数
阅读(2138) 2021-01-27
以get方式传输base64对url特殊字符处理
以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