如何使用不同的编码生成不同的md5哈希?

时间:2011-04-01 20:36:36

标签: php vb.net

我正在将.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哈希产生相同的结果?

2 个答案:

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