2013-03-25 29 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