base64url in java

2022-08-31 22:38:22

https://web.archive.org/web/20110422225659/https://en.wikipedia.org/wiki/Base64#URL_applications

谈论 base64Url - 解码


存在用于URL变体的修改后的Base64,其中不会使用填充“=”,并且标准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;
}

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


答案 1

爪哇8+

import java.util.Base64;


return Base64.getUrlEncoder().encodeToString(bytes);

答案 2

Base64 编码是自 Java 8 以来的 JDK 的一部分。java.util.Base64.getUrlEncoder() 也支持 URL 安全编码,并且可以通过另外使用 java.util.Base64.Encoder.withoutPadding() 方法跳过 “” 填充:=

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

public String encode(String raw) {
    return Base64.getUrlEncoder()
            .withoutPadding()
            .encodeToString(raw.getBytes(StandardCharsets.UTF_8));
}

推荐