将base64编码的字节转换为Java和c#中不同的字符串
本文关键字:字符串 编码 base64 字节 转换 Java | 更新日期: 2023-09-27 18:03:14
我有一些代码登录到第三方解决方案,这需要我编码一个密码。他们为我提供了一个Java示例,但我还需要用c#(和PHP,稍后)开发它。
我在一个c# Windows应用程序和一个Java Android应用程序中的代码,并且具有相同的输出,它们似乎工作得很好,直到我尝试将密码字节转换为base 64编码字符串。
下面是Java代码:enc = Base64.encodeBase64(ciphertext);
return enc.toString();
下面是c#代码:
return System.Convert.ToBase64String(cipherBytes);
我可以看到Java应用程序中的密文字节与c#应用程序中的密文字节相同,除了它们是签名的,并且Java中的base64编码字节,如果转换为ASCII值,将给出我在c#应用程序中看到的字符串,但是Java中的encs . tostring()不返回相同的字符串。
更多信息Javaciphertext = 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=
非常感谢你的帮助。(这是我在这里的第一个帖子,所以如果我违反了任何规则,请随时告诉我)
您正在使用的Java代码是在字节数组上调用toString()
,这将始终给您一个形式为[B@....
你可以使用:
return new String(enc, "ASCII");
…但我建议改变使用API编码字节数组给你一个字符串开始。我喜欢这个公共领域的实现。
return Base64.encodeBytes(cipherText);