在ASP.net中复制PHPBB密码哈希c#

我目前正在使用phpbb 3.0.8。 它拥有3,000名用户和约60,000个post。 我正在将论坛改为另一个,用经典的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#如何validationPHPBB哈希? 它是如何计算的?

我担心的是经典的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("


" + result);

这实际上返回true。 超! 但有谁知道为什么这有效? 我很困惑,它似乎根本不考虑盐。

看起来你的答案就在phpBB社区 ,但是你已经知道,它是盐渍哈希所以你需要使用链接中提供的function来检查你的密码,因为哈希会随着生成而改变。

如果您已经尝试过链接中提供的代码,请忽略。

希望能帮助到你…


另一个选择是创建单独的php页面/服务,进行密码散列或散列validation。 创建使用“phpbb_hash”函数并检查使用“phpbb_check_hash”,这些函数可以通过页面或服务公开给ASP或ASP.NET。

似乎PHPBB通过functions.php源文件中的phpbb_check_hash函数validation密码。 看起来它通常依赖于_hash_crypt_private来完成真正的工作。 该函数长57行(包括大量的空格),因此将其转换为C#应该相对简单。

您还可以调整当前的Phpbb系统,以便它存储登录期间输入的密码的SHA1哈希值。 如果您使用此调整运行一段时间,您将覆盖大多数活动用户,这将为您节省实施复杂算法的麻烦。 不太活跃的用户只能在无法登录时请求新密码,或者您可以向他们提供新密码并将其邮寄给他们(您可以在存储在Phpbb数据库中的最后登录日期选择它们)。

根据您的需要,您可能还想要涵盖Phpbb的自动登录function。 使用此function的用户可能甚至不知道他们的密码,因此如果它不支持自动登录,他们将无法登录到您的新系统。