2011-04-01 126 views
0

我正在移植一些代碼從.net(VB)到PHP,我碰到一些MD5散列,我不能在PHP中重現。在.net中,有兩個函數使用UTF-8編碼,另一個使用Unicode編碼。輸出是一個不同的hash字符串中的如何用不同的編碼產生不同的md5散列?

// First function (returns GUID) 
Dim oHasher As Cryptography.MD5 = Cryptography.MD5.Create() 
Dim oEncoder As New System.Text.UTF8Encoding() 
Dim csData() As Byte 

csData = oHasher.ComputeHash(oEncoder.GetBytes(strInput)) 


// Second function (returns GUID) 
Dim oHasher As Cryptography.MD5 = Cryptography.MD5.Create() 
Dim oEncoder As New System.Text.UnicodeEncoding() 
Dim csData() As Byte 

csData = oHasher.ComputeHash(oEncoder.GetBytes(strInput)) 

過去了,當在PHP中我一直在使用

$passHash = md5(utf8_encode($password)); 
$newPassHash = md5($password); 

嘗試,但他們都產生相同的結果。使用md5散列法可以在php中產生相同的結果嗎?

回答

1

Unicode可以通過不同的字符編碼來實現。最常用的編碼是UTF-8,但我不知道System.Text.UnicodeEncoding()默認使用的是什麼。

請嘗試使用UTF-16,因爲它是UTF-8在這種情況下唯一真正可能的選擇。

您可以使用mb_convert_encoding在不同的字符編碼之間移動,並且它支持UTF-16。

+0

UTF-16將在Windows上一個安全的賭注。 – 2011-04-01 20:40:54

+0

我會給你一個鏡頭。謝謝! – chobo 2011-04-01 21:07:29

+0

那麼做了那個工作? – 2011-04-02 17:52:03