【问题标题】:MembershipProvider.GetPassword algorithmMembershipProvider.GetPassword 算法
【发布时间】:2011-05-18 10:49:48
【问题描述】:

我们正在将一个 ASP 站点(使用 DotNetNuke)转换为一个新的 PHP 站点。我们现在唯一拥有的是现有数据库的完整导出。其中一张表名为“aspnet_Membership”,包含以下字段:

  • 密码(看起来像 base64)
  • PasswordFormat(始终为 2)
  • PasswordSalt(看起来像 base64)
  • 密码问题(始终为空)
  • PasswordAnswer(始终为空)

我们希望对这些密码进行解码并对它们进行哈希处理以适应我们自己的框架。根据我从.NET 文档中了解到的这些密码可以被解密。是否有可用的算法可以做到这一点,还是比这更复杂?如果我们在当前服务器上创建一个 ASP 脚本可以吗?

提前致谢

【问题讨论】:

  • 好的,感谢您的回复 ojb,尤其是 Simon,我能够检索 Web.config 的内容,因此我们现在有了解密密钥和验证密钥。加密方法设置为“3DES”。这会敲响警钟吗?我想现在应该可以用 PHP mcrypt 解密它,但我似乎找不到正确的参数。
  • 嗯.... 不知道您是否可以使用 PHP 做到这一点。使用 .NET,我认为您可以使用 GetPassword 方法重用成员资格提供程序:new SqlMembershipProvider().GetPassword(username, passwordAnswer);
  • @Simon Mourier 在他的所有观点上都是正确的。您需要原始机器密钥,SqlMembershipProvider.GetPassword 方法将起作用,还有一个不需要答案参数的 MembershipUser.GetPassword 方法。最后,我检查了一个我知道使用加密的数据库,并且 PasswordFormat 字段为 2。

标签: php asp.net asp.net-membership dotnetnuke mcrypt


【解决方案1】:

我认为 2 表示“加密”,而不是“散列”(参见定义 here

加密意味着您实际上可以解密它,但您需要将机器密钥存储在创建这些密码的物理机器的配置文件中(查看我发送的链接)。如果你只有一个数据库的副本,那你就做不到。

【讨论】:

    【解决方案2】:

    不幸的是,您在 PasswordFormat 中的值 2 告诉我们这些密码是经过哈希处理的,可能使用了 SHA1(您可以在 web.config 中检查这一点)。抱歉,无法可靠地取回原始密码。

    *edit:当然,除非您知道特定散列函数中的特定加密弱点。

    【讨论】:

    • 哇,是的,实际上 Simon Mourier(下)是正确的 2 意思是“加密”,前提是您使用的是 .NET 3.5 或更高版本。我目前无法让 Reflector 进行检查,但似乎他们切换了版本之间的枚举顺序。
    猜你喜欢
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多