Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将散列生成代码从ASP转换为PHP_Php_Asp.net_Converter - Fatal编程技术网

将散列生成代码从ASP转换为PHP

将散列生成代码从ASP转换为PHP,php,asp.net,converter,Php,Asp.net,Converter,我在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

我在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;
}
函数ComputeCredentialHash($timestamp、$id、$authKey){
$sigData=mb_convert_编码($timestamp.$id.$authKey,“ASCII”,“auto”);
$md5=md5($sigData);
$md5Hash=base64_编码($md5);
echo“ComputeCredentialHash=>$md5Hash
Sig Data=>$sigData
MD5 Sig=>$MD5
”; 返回$md5Hash; }

但这是行不通的。我肯定这是由于ASCII.GetBytes函数,但我不确定如何转换它,因为我不确定它的功能。它看起来只是返回字节数,但这对我来说真的没有意义(因为为什么它会给你一些如此通用的东西来进行散列)。无论如何,如果有人能帮忙,我将不胜感激。

Found说,“MD5类的ComputeHash方法以16字节数组的形式返回哈希值。请注意,一些MD5实现会生成32个字符的十六进制格式的哈希值。”–PHP的MD5()实现了后者,因此,如果希望与ASP代码生成的数据结构相同,则可能需要重新格式化其输出。

否,它不返回字节数,而是返回以ASCII字符表示文本的字节序列。由于PHP在内部将每个文本视为一个字节序列,因此不需要额外的步骤。如果不调用mb_convert_编码,只保存ASCII格式的纯文本,您会得到什么?(我不理解您的方法正在接收的参数,因为它似乎对这些参数没有任何作用。)@CBroe
mb\u convert\u编码实际上对它接收的字符串没有任何作用,因为它已经是ASCII格式。我只是把它作为一个补充措施。但在这种情况下,它的进出是一样的。我也展示了参数现在是如何使用的。这是随机字符串。是的,我也读过关于PHP的内容,以及它是如何将其视为字节的。这就是为什么现在里面没有什么东西,但这是我唯一认为不同的地方。感谢您的回复。值得指出的是,MD5不被视为密码的安全算法(我从函数名猜这是用于密码哈希的?)。您传递给PHP函数的
$timestamp
字符串是否已格式化为
yyyy-MM-ddTHH:MM:ss.fffZ
,就像在ASP函数中显式完成的那样?如果不是,并且它只是以秒为单位的Unix时间戳值,则必须先将其格式化为此格式,然后再将其嵌入
$sigData
。在这里发现这样一句话:“MD5类的ComputeHash方法将散列返回为16个字节的数组。请注意,某些MD5实现会生成32个字符的十六进制格式的散列。”–PHP的md5()实现了后者,因此,如果您想要与ASP代码生成的数据结构相同,则可能需要重新格式化其输出。仍在等待检查我的哈希值与他们的哈希值,但我很确定这就是结果。我会在我确认后尽快标记为答案。我想现在只有我的登录凭据是错误的,所以这似乎起了作用。非常感谢你的帮助。