c# - 在 ASP.net c# 中复制 PHPBB 密码散列

标签 c# asp.net hash phpbb

我目前使用的是 phpbb 3.0.8。它拥有 3,000 名用户和大约 60,000 个帖子。我正在将论坛更改为另一个用经典 ASP 编写的论坛(我知道人们会不赞成这样做,但我有充分的理由)。

我的网站是用 ASP.net 编写的。经典的 ASP 论坛有一个 API 可以连接到它。我已经设置了所有这些,并且工作正常。我已经编写了自己的登录表单。

我想复制所有用户帐户。当前论坛有表:

Username | Password |  Hash  |  Salt

我已经覆盖了经典的 ASP 散列技术,现在使用 ASP.net Security.SHA1 散列。密码存储为 SHA1(rawpassword + salt)

我的计划是将新字段与当前字段一起存储:

UserID | Password |  Hash  |  Salt  |  PHPBBHash

当用户登录时,如果设置了 PHPBB hashh 字段,它将使用 PHPBB 哈希对密码进行哈希处理。然后,如果登录成功,它会删除 PHPBBHash 字段,并创建当前系统的哈希值。这样,从 PHPBB 到新论坛的过渡就很顺利,没有人会丢失帐户。

我的问题是,给定 PHPBB 哈希、用户名和密码,在 ASP.net c# 中我如何验证 PHPBB 哈希?它是如何计算的?

我还担心经典的 ASP 哈希函数声称是 SHA1,但它产生的结果与 Securiy.SHA1 不同。

编辑

如果有人能给我一个明确的解决方案,我会为此悬赏,我很欣赏链接到资源的答案,但我仍在努力理解它。

测试用例

原始密码:

blingblangblaow222

在 PHPBB3 数据库中:

username: Tom
username_clean: tom
user_password: $H$9ojo08A3LuhnkXR27p.WK7dJmOdazh0
user_passchg: 1301433947
user_form_salt: 637f480dfdab84ef

使用 Vishalgiris 回答中的示例代码,我们这样做:

phpBB.phpBBCryptoServiceProvider cPhpBB = new phpBB.phpBBCryptoServiceProvider();
string remoteHash = "$H$9ojo08A3LuhnkXR27p.WK7dJmOdazh0";
bool result = cPhpBB.phpbbCheckHash("blingblangblaow222", remoteHash);
Response.Write("<BR><BR><BR>" + result);

这实际上返回 true。极好的!但是有谁知道为什么会这样?我很困惑,它似乎根本没有考虑盐分。

最佳答案

PHPBB 似乎通过 phpbb_check_hash function 验证密码在functions.php source file .看起来它通常依赖于 _hash_crypt_private做真正的工作。该函数长 57 行(包括大量空格),因此将其转换为 C# 应该相对简单。

关于c# - 在 ASP.net c# 中复制 PHPBB 密码散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376494/

相关文章:

asp.net - Jquery Asp.net 按钮禁用

javascript - 在javascript中找到具有公共(public)键的哈希数组的最大值

c# - asp.net mvc 发送 httpstatuscode 200 但不返回

javascript - 如何在 Firefox 的 Firebug 中调试 JavaScript

c# - 嵌入 ASP.Net 的 WinForms

asp.net - 如何让在IE6下设计的ASP网页兼容IE8?

javascript 使用 # id 聚焦于 div 元素

c++ - 在 C++ 中正确地进行单独链接

c# - 在 Settings.settings 中保存属性

c# - 尝试在 formview 中绑定(bind)下拉列表时出现空引用异常