【发布时间】:2018-10-05 04:03:40
【问题描述】:
我试图转换为 PHP 的 .NET 代码是:
Dim hmac As New HMACMD5(secretPassword)
Dim computedHash As Byte() = hmac.ComputeHash(stringToHash)
目前在php中我正在使用:
$computedHash = hash_hmac('md5', $stringToHash, $secretPassword);
据我了解,php 函数 hash_hmac() 是正确的函数,因为它是指定使用 md5 的方法,但是在测试这两种情况下会产生不同的哈希结果。我了解 .net 代码返回一个数组,但是数组值与 php 结果完全不同。
在 .net 代码中,参数上有 ascii 编码,但我已经验证我的 php 代码产生相同的编码结果,只是散列产生不同的结果。我还测试了两位数(“021”与“21”)中前导零的编码结果,是的,它们产生不同的编码,但是当我尝试两者时,这并没有解决哈希问题。
vb .net 变量值示例:
.NET ascii encoded secretPassword "pass123" = [112, 97, 115, 115, 49, 50, 51]
.NET ascii encoded stringToHash "hashstring" = [104, 97, 115, 104, 115, 116, 114, 105, 110, 103]
.NET hash results = [43, 65, 108, 137, 120, 163, 203, 231, 219, 197, 238, 187, 209, 216, 213, 225]
php 哈希结果(我已经确认我在 php 中的编码产生与 .net 相同的结果):
a2c9f74f2597038a39b28538d7f1d73a
【问题讨论】:
-
来自 .NET 的明文、哈希和机密示例怎么样?这样我们就可以在不猜测的情况下真正尝试回答您的问题。
-
已更新,请参见上文,谢谢@Sammitch
-
三件事。首先,向我们展示您的 .NET 代码和 php 代码。使其成为我们可以直接从您的文本中复制并编译和运行的代码。其次,显示程序的确切输出。最后,以相同的格式显示两个程序的输出。如果人们不必在脑海中进行十进制到十六进制的转换,您会发现他们更愿意提供帮助。让我们轻松为您提供帮助。