我有一个游戏服务器运行在与 phpBB 论坛相同的服务器上。
我想让用户通过输入他们的 phpBB 用户名和密码来向游戏服务器验证他们的身份。
我知道如何使用他们的用户名(只需获取他们的用户名并将其与 SQL 数据库中的“用户名”字段进行比较。)
但是,我不确定如何加密输入的密码,以便将其与“user_password”字段进行比较。如果它需要 md5,我更喜欢在 SQL 中使用 md5() 函数,但我可以在 SQL 之外执行它。
显然,phpBB 使用phpass进行密码管理。这实际上非常好,因为这意味着您很有可能在幕后使用bcrypt之类的标准密码散列算法。Bcrypt 被认为是非常强大的。
要确定密码是否与 bcrypted 哈希匹配,您(逻辑上)检索编码的哈希字符串,从中获取成本参数和盐,然后查看(当您将 bcrypt 算法应用于提交的密码时,成本和盐)它会产生与您检索到的相同的实际哈希字节。它的计算成本很高(如果您从头开始实施,散列算法本身就很棘手,建议您不要这样做),但从逻辑上讲,它对外界来说并不是那么复杂。
将代码放入 PHP 中进行验证并通过本地 Web 服务调用进行验证可能是值得的,因为这样您就可以轻松地利用现有代码(这样,您绝对可以匹配用户凭证处理的内容)。大概让它成为一个处理登录后只返回“当前”用户名的页面,并使这个客户端不保持会话状态。(这应该是微不足道的。)您可能需要考虑锁定页面以防止从机器访问,并添加某种速率限制(例如,每个用户每 10 秒对此特殊页面只有一个响应)为这使得各种讨厌的技巧变得不切实际。