java中的base64url

ufk*_*ufk 30 java base64

http://en.wikipedia.org/wiki/Base64#URL_applications

谈论base64Url - 解码


存在修改后的Base64 for URL变体,其中不使用填充'=',标准Base64的'+'和'/'字符分别替换为' - '和'_'


我创建了以下功能:

public static String base64UrlDecode(String input) {
    String result = null;
    BASE64Decoder decoder = new BASE64Decoder();
    try {
        result = decoder.decodeBuffer(input.replace('-','+').replace('/','_')).toString();
    }
    catch (IOException e) {
        System.out.println(e.getMessage());
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

它返回一组非常小的字符,甚至与预期的结果不相似.有任何想法吗?

Bor*_*hov 61

Java8 +

import java.util.Base64;


return Base64.getUrlEncoder().encodeToString(bytes);
Run Code Online (Sandbox Code Playgroud)

  • 如果你不喜欢尾随 '='(填充),然后使用:.Base64.getUrlEncoder()withoutPadding()encodeToString(str.g etBytes(UTF_8)) (26认同)

ufk*_*ufk 23

通过使用Base64Apache Commons,可以配置为URL安全,我创建了以下功能:

import org.apache.commons.codec.binary.Base64;

public static String base64UrlDecode(String input) {
    String result = null;
    Base64 decoder = new Base64(true);
    byte[] decodedBytes = decoder.decode(input);
    result = new String(decodedBytes);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

构造函数Base64(true)使解码URL安全.


dea*_*mon 22

自Java 8以来,Base64编码是JDK的一部分.还支持URL安全编码.

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public String encode(String raw) {
    return Base64.getUrlEncoder()
            .withoutPadding()
            .encodeToString(raw.getBytes(StandardCharsets.UTF_8));
}
Run Code Online (Sandbox Code Playgroud)

  • 使用Base64.getUrlEncoder().withoutPadding().encodeToString(str.getBytes(UTF_8)) (6认同)
  • 这是doc:http://docs.oracle.com/javase/8/docs/api/java/util/Base64.html (5认同)

use*_*654 5

public static byte[] encodeUrlSafe(byte[] data) {
    byte[] encode = Base64.encode(data);
    for (int i = 0; i < encode.length; i++) {
        if (encode[i] == '+') {
            encode[i] = '-';
        } else if (encode[i] == '/') {
            encode[i] = '_';
        }
    }
    return encode;
}

public static byte[] decodeUrlSafe(byte[] data) {
    byte[] encode = Arrays.copyOf(data, data.length);
    for (int i = 0; i < encode.length; i++) {
        if (encode[i] == '-') {
            encode[i] = '+';
        } else if (encode[i] == '_') {
            encode[i] = '/';
        }
    }
    return Base64.decode(encode);
}
Run Code Online (Sandbox Code Playgroud)


Ode*_*ner 5

在Android SDK中,类中有一个专用标志Base64:Base64.URL_SAFE,使用它来解码为String:

import android.util.Base64;
byte[] byteData = Base64.decode(body, Base64.URL_SAFE);
str = new String(byteData, "UTF-8");
Run Code Online (Sandbox Code Playgroud)