将哈希生成代码从ASP转换为PHP

时间:2013-03-25 13:09:37

标签: php asp.net converter

我在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函数引起的,但我不确定如何转换它,因为我不确定它的作用。看起来它只是返回字节数,但这对我来说并没有多大意义(为什么它会给你一些如此通用的东西来制作一个哈希值)。无论如何,如果有人可以提供帮助,我会很感激。

1 个答案:

答案 0 :(得分:1)

发现this here说,“MD5类的ComputeHash方法将散列作为16字节的数组返回。请注意,一些MD5实现产生一个32个字符,十六进制格式的散列。“ - PHP的md5()执行后者,因此如果您需要与ASP代码相同的数据结构,则可能需要重新格式化其输出产生