2

我正在将 ASP 网站转换为 PHP。该站点使用第 3 方 API。第 3 方 API 需要存储在数据库中的用户 ID 和每个用户的密码。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

4

2 回答 2

1

.NET 和 PHP 版本之间的结果差异可能是由于每个将字符串转换为 int 的方式。尝试在两者中转换您的示例 ID,然后进行比较。

于 2012-12-06T19:05:43.720 回答
1

ASP:var hash = userId.ToString().MD5();

看到那ToString()部分了吗?这意味着 ID 可能被解释为字符串。

你的PHP:$hash = md5((int)$user_id);

将其显式转换为 int,它将散列为完全不同的值。

一个示例 UserID 实际上是一个字符串,而不仅仅是一个数字:22E21F5D-7979-467E-928D-4EFCC323BDCB

那么...为什么将其转换为int?:我

编辑:我也喜欢密码似乎是从用户 ID 的哈希静态生成的。非常安全。

于 2012-12-06T20:19:03.273 回答