在 Java 中解码 base64Url

新手上路,请多包涵

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;
}

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

原文由 ufk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

使用来自 Apache Commons 的 Base64 可以配置为 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;
}

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

原文由 ufk 发布,翻译遵循 CC BY-SA 3.0 许可协议

Java8+

 import java.util.Base64;

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

原文由 Boris Treukhov 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题