java - 如何使 String Base64 Url 安全 Java/Android?

标签 java android base64

我已经尝试了一段时间,但无论我做什么,我似乎都无法让我的字符串成为 Url 安全的:

Input: XwPp9xazJ0ku5CZnlmgAx2Dld8SHkAeT+d7yvxw=
Desired Output: XwPp9xazJ0ku5CZnlmgAx2Dld8SHkAeT-d7yvxw

本质上,我想在来自 https://developer.android.com/reference/android/util/Base64.html 的输入字符串上应用一些标志,即 Base64.URL_SAFEBase64.NO_PADDINGBase64.NO_WRAP。但是当我这样做时:

String str = "XzbeW3jg9NYp6J0w2mTP4NLrTK06p1EDTnNG+KYhvyw=";

byte[] encoded = Base64.encode(
        str.getBytes(), Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);

byte[] strBytes = Base64.decode(encoded, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
String decoded = new String(strBytes);

//outputs original str "XzbeW3jg9NYp6J0w2mTP4NLrTK06p1EDTnNG+KYhvyw="
System.out.println(decoded);

我不确定为什么 url 安全编码在这里不起作用,是不是我做错了什么?有没有办法获得我想要的输出(除了手动执行 String.replace() 和其他字符串修改?

最佳答案

感谢大家的评论!没错,我已经有了一个 base64 编码的字符串,我需要先解码然后重新编码。

byte[] strBytes = Base64.decode(str, Base64.DEFAULT);
byte[] encoded = Base64.encode(
    strBytes, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
return new String(encoded);

是最终为我工作的解决方案。

关于java - 如何使 String Base64 Url 安全 Java/Android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47123876/

相关文章:

android - socket.io Android 库认证

java - 字符串base64解码未gziped从little-endian 4字节int到java int

swift - 在 Swift 中使用 "/"的 Base64Encoding 结果字符串

java - GAE 中的集合问题

java - 使用for循环负数结束程序?

Javac 找不到位于同一目录中的类

java - 将 .txt 文件中的字符串读入二维数组;忽略引号中的空格;仅使用 JDK

java - onActivityResult() 未在新的嵌套 fragment API 中调用

android - 如何使用android-ndk?

ruby - 使用 Spotify 客户端 ID 和 secret 返回无效客户端的 Curl 发布请求