【问题标题】:How to convert .net HMACMD5 hashing to php equivalent?如何将 .net HMACMD5 散列转换为 php 等价物?
【发布时间】: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 代码。使其成为我们可以直接从您的文本中复制并编译和运行的代码。其次,显示程序的确切输出。最后,以相同的格式显示两个程序的输出。如果人们不必在脑海中进行十进制到十六进制的转换,您会发现他们更愿意提供帮助。让我们轻松为您提供帮助。

标签: php .net vb.net hash md5


【解决方案1】:

我想通了,以防万一有人遇到这种情况:

如果您获得了有关 API 身份验证的示例 VB .NET 代码,并且您看到涉及将数据和密码编码为字节数组的 ASCII 代码,那么如果您尝试在 PHP 中复制代码,则无需执行此步骤。

PHP 已经将字符串存储为字节数组,并且它们应该已经是有效的 UTF-8 格式。所以基本上跳过任何编码步骤,只需插入你的参数就可以了(参数是字符串):

$computedHash       = hash_hmac('md5', $strToHash, self::$password, true);
$computedHashString = base64_encode($computedHash);

您可能需要根据 api 将最后一个参数更改为 false,但据我所知,true 是最常见的情况,因为 api 通常期望哈希是二进制的,然后是 base 64 编码的。希望这对某人有所帮助~

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2016-07-09
    • 2023-04-02
    • 2016-04-29
    • 2016-05-23
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多