在Java和C#中将base64编码的字节转换为字符串方式不同

5
我有一些用于登录第三方解决方案的代码,需要我对密码进行编码。他们已经提供了Java示例,但我还需要在C#(和之后的PHP)中开发它。
我已经将该代码应用到C# Windows应用程序和Java Android应用程序中,并且获得了相同的输出结果,但是当我尝试将密文字节转换为Base64编码字符串时,似乎出现了问题。
以下是Java代码:
enc = Base64.encodeBase64(ciphertext);
return enc.toString();

以下是C#代码:

return System.Convert.ToBase64String(cipherBytes);

我看到Java应用程序中的密文字节与C#应用程序中的相同,除了它们是带符号的。如果将Java中的base64编码字节转换为ASCII值,则会得到在C#应用程序中看到的字符串,但是在Java中使用enc.ToString()不能返回相同的字符串。

更多信息

Java

ciphertext = 66, 67, -69, 24, -48, -23, 84, -5
encodeded64 = 81, 107, 79, 55, 71, 78, 68, 112, 86, 80, 115, 61
to string = [B@41771ea8

C#

cipherBytes = 66, 67, 187, 24, 208, 233, 84, 251
result = QkO7GNDpVPs=

非常感谢您的帮助。(这是我第一次在这里发帖,请随时让我知道是否违反了任何规则。)
1个回答

11

您使用的Java代码调用了toString()方法,并传递了一个字节数组,这将始终返回形如[B@....的字符串。

可以尝试使用:

return new String(enc, "ASCII");

...但我建议改用一个API,在那里将字节数组编码后返回一个字符串。我喜欢这个公共领域实现

return Base64.encodeBytes(cipherText);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接