我目前正在使用 phpbb 3.0.8。它有 3,000 名用户和大约 60,000 个帖子。我正在将论坛更改为不同的论坛,用经典的 ASP 编写(我知道人们会不赞成这一点,但我有充分的理由)。
我的网站是用 ASP.net 编写的。经典的 ASP 论坛有一个 API 可以连接到它。我已经设置了所有这些,并且工作正常。我已经编写了自己的登录表单。
我想复制所有用户帐户。当前论坛有表:
Username | Password | Hash | Salt
我已经覆盖了经典的 ASP 散列技术,现在使用 ASP.netSecurity.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。极好的!但是有谁知道为什么会这样?我很困惑,它似乎根本没有考虑到盐。