我正在努力将ASP网站转换为PHP。该网站使用第三方API。第三方API需要存储在数据库中的UserID和每个用户的密码。 ASP站点没有将密码保存在数据库中,而是使用以下函数每次根据UserID导出密码:
public static string GetLmsUserPassword(int userId)
{
var hash = userId.ToString().MD5();
return hash.Substring(15, 4) + hash.Substring(4, 4);
}
在PHP中,我写了以下内容:
function lms_password($user_id) {
$hash = md5((int)$user_id);
$password = substr($hash,15,4).substr($hash,4,4);
return $password;
}
但是,在PHP中生成的密码似乎与ASP中的密码不匹配。我想知道ASP是否有不同的md5?
示例UserID实际上是一个字符串,而不仅仅是一个数字:22E21F5D-7979-467E-928D-4EFCC323BDCB
答案 0 :(得分:1)
.NET和PHP版本之间的结果差异可能是由于每个字符串都将字符串转换为int的方式。尝试在两者中转换您的示例ID,并进行比较。
答案 1 :(得分:1)
ASP:var hash = userId.ToString().MD5();
看到ToString()
部分?这意味着ID可能被解释为字符串。
您的PHP:$hash = md5((int)$user_id);
显式地将其强制转换为int,它将散列为完全不同的值。
示例UserID实际上是一个字符串,而不仅仅是一个数字:22E21F5D-7979-467E-928D-4EFCC323BDCB
那么......你为什么要把它作为一个int? :我
编辑:我也喜欢密码似乎是从userID的哈希值静态生成的。非常安全。