我目前正在使用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
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.超!但有谁知道为什么这有效?我很困惑,它似乎根本不考虑盐.