2011-04-01 62 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