我正在将.net(vb)中的一些代码移植到php,我遇到了一些我无法在php中重现的md5哈希。在.net中有两个函数,一个使用UTF-8编码,另一个使用Unicode编码。在字符串
中传递时,输出是不同的哈希// 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);
但它们都产生相同的结果。是否有可能在php中使用md5哈希产生相同的结果?
答案 0 :(得分:1)
Unicode可以通过不同的字符编码实现。最常用的编码是UTF-8,但我想知道System.Text.UnicodeEncoding()
默认使用的是什么。
尝试使用UTF-16,因为在这种情况下,它是UTF-8的唯一真正替代品。
您可以使用mb_convert_encoding在不同的字符编码之间移动,并且它支持UTF-16。
答案 1 :(得分:1)
答案是:http://technikq.blogspot.de/2013/09/php-utf-16-hashed-md5-string.html
基本上:
$string = "e3e3_e37";
$stringEncoded = mb_convert_encoding($string, 'UTF-16LE', 'UTF-8');
$encoded_string = md5($string);