簡體   English   中英

在Java和C#中將base64編碼的字節轉換為不同的字符串

[英]Converting base64 encoded bytes to string different in Java and C#

我有一些代碼可以登錄第三方解決方案,這需要我對密碼進行編碼。 他們為我提供了Java樣本,但我還需要用C#(以及后來的PHP)開發它。

我有一個C#Windows應用程序和一個Java Android應用程序的代碼,並且具有相同的輸出,它們似乎工作得很好,直到我嘗試將cypher字節轉換為base 64編碼的字符串。

這是Java代碼:

enc = Base64.encodeBase64(ciphertext);
return enc.toString();

這是C#代碼:

return System.Convert.ToBase64String(cipherBytes);

我可以看到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

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM