2013-03-25 46 views
0

我有這樣的代碼在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函數造成的,但我不確定如何轉換它,因爲我不太確定它的功能。它看起來只是返回字節的數量,但這對我來說並沒有什麼意義(爲什麼它會給你一些如此通用的東西來使散列出來)。無論如何,如果任何人都可以幫忙,我會很感激。

+0

不,它不返回字節數,而是返回表示文本爲ASCII字符的字節序列。由於PHP將每個文本視爲內部字節序列,因此不需要執行其他步驟。沒有調用mb_convert_encoding,只有純文本保存在ASCII中,你會得到什麼? (並且我不明白你的方法正在接收的參數,因爲它似乎沒有對它們做任何事情。) – CBroe 2013-03-25 13:21:46

+0

@CBroe mb_convert_encoding實際上對接收的字符串沒有任何作用,因爲它已經在ASCII。我只是將其作爲一項附加措施。但是在這種情況下,它和進行中一樣。我展示了現在如何使用這些參數。那是隨機的字符串。是的,我也讀過關於PHP以及它如何將它視爲字節。這就是爲什麼現在沒有任何內容,但這是我認爲唯一不同的東西。謝謝回覆。 – James 2013-03-25 13:29:37

+0

值得指出的是,MD5不被認爲是一個安全的密碼算法(我從函數名猜測這是用於密碼哈希?)。 – Spudley 2013-03-25 13:32:00

回答

1

找到this here說:「MD5類的ComputeHash方法返回散列爲16字節的數組。請注意,某些MD5實現會產生一個32個字符的十六進制格式的哈希。「 - PHP的md5()完成後者,所以如果您需要與您的ASP代碼相同的數據結構,則可能需要重新格式化其輸出產生。

+0

仍然在等着檢查我的哈希對他們的,但我很確定這是它。只要我能確認,我會立即作出回答。 – James 2013-03-25 20:09:47

+0

我想現在只有我的登錄憑據是錯誤的,所以這似乎工作。非常感謝您的幫助。 – James 2013-03-28 14:05:22