gpt4 book ai didi

java - Java 中的 Base64 编码与 C# 中的 HttpServerUtility.UrlTokenEncode

转载 作者:行者123 更新时间:2023-12-02 10:04:18 25 4
gpt4 key购买 nike

我在尝试用 Java 编码 String 时遇到了麻烦。

我有以下 C# 代码和字符串 Bpz2Gjg01d7VfGfD8ZP1UA==,当我执行 C# 代码时,我得到:

QnB6MkdqZzAxZDdWZkdmRDhaUDFVQT090

public static void Main(string[] args)
{
string strWord = "Bpz2Gjg01d7VfGfD8ZP1UA==";
byte[] encbuff = Encoding.UTF8.GetBytes(strWord);
string strWordEncoded = HttpServerUtility.UrlTokenEncode(encbuff);
Console.WriteLine(strWordEncoded);
}

我正在尝试用 Java 复制前面的代码,在第一个我尝试使用javax.xml.bind.DatatypeConverter Class:

public static void main(String[] args) {
String strWord = "Bpz2Gjg01d7VfGfD8ZP1UA==";
byte[] encbuff = strWord.getBytes(StandardCharsets.UTF_8);
String strWordEncoded = DatatypeConverter.printBase64Binary(encbuff);
System.out.println(strWordEncoded);
}

但是我收到以下字符串(与 C# string 相比缺少最后一个零):

QnB6MkdqZzAxZDdWZkdmRDhaUDFVQT09

在我的第二次尝试中,我使用了 BouncyCaSTLe Base64 编码器:

public static void main(String[] args) {
String strWord = "Bpz2Gjg01d7VfGfD8ZP1UA==";
byte[] encbuff = strWord.getBytes(StandardCharsets.UTF_8);
String strWordEncoded = new String(Base64.encode(encbuff));
System.out.println(strWordEncoded);
}

但是我得到了与之前完全相同的String(仍然缺少最后一个零):

QnB6MkdqZzAxZDdWZkdmRDhaUDFVQT09

有人知道会发生什么吗?

最佳答案

我查看了 .NET 框架代码。 UrlTokenEncode 实际上从 base64 字符串末尾删除了任何额外的 = 填充符号,并将其替换为填充符号的数量,因此 012。这就是导致字符串末尾出现额外 0 的原因。因此请注意:HttpServerUtility.UrlTokenEncode 方法不是普通的 Base64 编码器。它实际上在内部使用 Convert.ToBase64String 进行常规编码,并在顶部添加了更多内容(请参阅我对这个问题的评论)。如果您需要创建这个精确的字符串,则需要在常规 Base64 编码之上在 Java 中实现相同的更改。

关于java - Java 中的 Base64 编码与 C# 中的 HttpServerUtility.UrlTokenEncode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55422403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com