fis*_*ish 5 c# java base64 encode
我有一些代码可以登录第三方解决方案,这需要我对密码进行编码.他们为我提供了Java样本,但我还需要用C#(以及后来的PHP)开发它.
我有一个C#Windows应用程序和一个Java Android应用程序中的代码,并且具有相同的输出,它们似乎工作得很好,直到我尝试将cypher字节转换为base 64编码的字符串.
这是Java代码:
enc = Base64.encodeBase64(ciphertext);
return enc.toString();
Run Code Online (Sandbox Code Playgroud)
这是C#代码:
return System.Convert.ToBase64String(cipherBytes);
Run Code Online (Sandbox Code Playgroud)
我可以看到Java应用程序中的密文字节与C#app中的密文字节相同,只是它们是有符号的,并且Java中的base64编码字节(如果转换为ASCII值)将给出我在中看到的字符串C#app,但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
Run Code Online (Sandbox Code Playgroud)
C#
cipherBytes = 66, 67, 187, 24, 208, 233, 84, 251
result = QkO7GNDpVPs=
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助.(这是我在这里的第一篇文章,如果我违反任何规则,请随时告诉我)
Jon*_*eet 11
您正在使用的Java代码是调用toString()字节数组,它总是会为您提供表单的字符串[B@....
你可以使用:
return new String(enc, "ASCII");
Run Code Online (Sandbox Code Playgroud)
...但我建议更改为使用API,其中编码字节数组会返回一个字符串开头.我喜欢这个公共领域的实现.
return Base64.encodeBytes(cipherText);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4897 次 |
| 最近记录: |