0

我在 ASP 中有这段代码:

Public Function ComputeCredentialHash(ByVal timestamp As DateTime, ByVal id As String, ByVal authKey As String) As String
    Dim sig As String = timestamp.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ") & id & authKey
    Dim sigdata As Byte() = System.Text.Encoding.ASCII.GetBytes(sig)
    Dim md5 As System.Security.Cryptography.MD5 = New System.Security.Cryptography.MD5CryptoServiceProvider()
    Dim md5Hash As String = System.Convert.ToBase64String(md5.ComputeHash(sigdata))
    Return md5Hash
End Function

我需要编写一个 PHP 函数来做同样的事情。到目前为止,我有:

function ComputeCredentialHash ($timestamp, $id, $authKey) {
    $sigData = mb_convert_encoding($timestamp.$id.$authKey, "ASCII", "auto");
    $md5 = md5($sigData);
    $md5Hash = base64_encode($md5);
    echo "ComputeCredentialHash => $md5Hash<br/>Sig Data => $sigData<br/>MD5 Sig => $md5<br/>";
    return $md5Hash;
}

但这不起作用。我确定这是由于该ASCII.GetBytes功能,但我不确定如何转换它,因为我不确定它的作用。看起来它只是返回字节数,但这对我来说真的没有意义(为什么它会给你一些如此通用的东西来制作散列)。无论如何,如果有人可以提供帮助,我将不胜感激。

4

1 回答 1

1

发现这里说:“MD5 类的 ComputeHash 方法将哈希作为 16 字节的数组返回。请注意,某些 MD5 实现会生成 32 个字符的十六进制格式的哈希。” – PHP 的 md5() 执行后者,因此如果您想要与 ASP 代码生成的数据结构相同,您可能必须重新格式化其输出。

于 2013-03-25T15:03:22.590 回答