我在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
函数引起的,但我不确定如何转换它,因为我不确定它的作用。看起来它只是返回字节数,但这对我来说并没有多大意义(为什么它会给你一些如此通用的东西来制作一个哈希值)。无论如何,如果有人可以提供帮助,我会很感激。
答案 0 :(得分:1)
发现this here说,“MD5类的ComputeHash方法将散列作为16字节的数组返回。请注意,一些MD5实现产生一个32个字符,十六进制格式的散列。“ - PHP的md5()执行后者,因此如果您需要与ASP代码相同的数据结构,则可能需要重新格式化其输出产生