2014-10-20 86 views
1

此代碼生成一個32長度的UTF-16字符串,我從java中移植它。問題是,輸出與此處不同。C#Little-Endian轉換Java Big-Endian

我認爲問題在於Java將UTF-16作爲Big-Endian和C#Little-Endian處理的事實。

首先,我的字符串使用彈性城堡Pkcs5s2加密,然後我們繼續使用Password_Hash方法將其放入字符串中。

所以我的問題是,我如何使這個循環運行使用Big-Endian,然後生產相同的字符串,因爲我會在Java中。

回答

2

我在你的代碼中的文本編碼甚至事項所看到的唯一的地方是這樣的語句:

Encoding.UTF8.GetBytes(USER_SALT); 

而且它使用UTF-8,而不是UTF-16。

如果你想要一個big-endian的UTF-16,你可以使用Encoding.BigEndianUnicode而不是Encoding.UTF8。

+0

我也注意到,但utf-8是endian不可知論的。參見http://stackoverflow.com/questions/3833693/isn-t-on-big-endian-machines-utf-8s-byte-順序不同於小端 – 2014-10-20 18:14:02

+0

是的,UTF-8是endian不可知的。但是OP表示他被UTF-16卡住了,因爲這就是Java最終使用的。你不能僅僅決定使用UTF-8而不與另一端協調。恕我直言,UTF-8在這裏實際上更好,因爲永恆變得無關緊要,因爲它通常比UTF-16更簡潔。但是如果你必須使用UTF-16,那麼......呃,你必須使用UTF-16! – 2014-10-20 18:21:39

+0

正如你指出使用'Encoding.BigEndianUnicode',答案可能會有幫助。 – 2014-10-20 18:42:59