我有这样的代码在ASP:从ASP转换哈希生成代码PHP
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
函数造成的,但我不确定如何转换它,因为我不太确定它的功能。它看起来只是返回字节的数量,但这对我来说并没有什么意义(为什么它会给你一些如此通用的东西来使散列出来)。无论如何,如果任何人都可以帮忙,我会很感激。
不,它不返回字节数,而是返回表示文本为ASCII字符的字节序列。由于PHP将每个文本视为内部字节序列,因此不需要执行其他步骤。没有调用mb_convert_encoding,只有纯文本保存在ASCII中,你会得到什么? (并且我不明白你的方法正在接收的参数,因为它似乎没有对它们做任何事情。) – CBroe 2013-03-25 13:21:46
@CBroe mb_convert_encoding实际上对接收的字符串没有任何作用,因为它已经在ASCII。我只是将其作为一项附加措施。但是在这种情况下,它和进行中一样。我展示了现在如何使用这些参数。那是随机的字符串。是的,我也读过关于PHP以及它如何将它视为字节。这就是为什么现在没有任何内容,但这是我认为唯一不同的东西。谢谢回复。 – James 2013-03-25 13:29:37
值得指出的是,MD5不被认为是一个安全的密码算法(我从函数名猜测这是用于密码哈希?)。 – Spudley 2013-03-25 13:32:00