我有這樣的代碼在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