【问题标题】:How do I parse and use htpasswd files in C#如何在 C# 中解析和使用 htpasswd 文件
【发布时间】:2013-03-01 07:59:10
【问题描述】:

我想在 MVC 中将 Apache 的 htpasswd 实用程序与我的自定义 BasicAuthenticationAttribute 一起使用。但是,根据 htpasswd 文档,我不确定如何计算密码哈希以与 htpasswd 文件进行比较。是否有一个托管的 .NET 库或一些简单的文档可以帮助我解决这个问题?

编辑:Heinzi 指出的问题适用于 SHA,但我也希望能够处理 MD5(APR1?)哈希变体。我看过一些代码示例,但它们对我来说有点太不透明了,无法理解。对于 Apache 文档中链接到的实际代码文件也是如此。

理想情况下,我希望能够获取任何客户端的 .htpasswd 文件并将其放入我的 ASP.NET 站点以进行身份​​验证,而不受使用哪种哈希方法的限制。

【问题讨论】:

  • 此答案适用于 PHP,但 .NET 库还包含 SHA1 和 MD5 的类:stackoverflow.com/questions/39916/…
  • @Chris 您的标题已被编辑,c# 已被删除。也许你想把它放回去,因为我认为这对这个问题很有意义
  • 我厌倦了这个该死的网站上过分热心的编辑。我将 C# 放在标题中是因为在本网站的某些地方(例如,此处右侧的相关部分),您看不到标签,因此如果标题中没有,您可能不知道这是一个 C# 问题。整个该死的网站网络都受到网站管理员过度节制的影响。
  • @Chris:这是一个协作站点,所以让其他人编辑您的帖子是完全正常的(改进格式)。尽管我同意并非所有对您帖子所做的编辑都是好的。
  • 这甚至与编辑是否可以接受无关。这是关于它们是否是必要的。个人风格和观点不是编辑帖子的正当理由。

标签: c# .htpasswd


【解决方案1】:

我最近向CryptSharp 添加了对 Apache MD5 的支持。它可以为您计算和验证这些密码。由于它是一种变体,因此您需要为 Crypter.MD5.Crypt() 方法提供一个额外的参数:

string cryptedPassword = Crypter.MD5.Crypt("HelloWorld", new CrypterOptions
  {
    { CrypterOption.Variant, MD5CrypterVariant.Apache }
  }));

验证:

bool matches = Crypter.CheckPassword("HelloWorld", cryptedPassword);

您也可以使用 Crypt() 方法本身进行验证,但 CheckPassword() 会自动确定它是否是 Apache MD5、DES 等。

希望对你有帮助

詹姆斯

【讨论】:

  • 显然有人克隆了您的源代码并为它制作了一个 nuget 包。您应该尝试与他们联系以协调这项工作,以便可以更新现有的 nuget 包以包含您的最新版本。 github.com/ChrisMcKee/cryptsharp
  • 是的,我看到了并联系了他。他没有更新它(奇怪的是,自述文件除外),所以我发布了一个官方的 CryptSharp 包:nuget.org/packages/CryptSharpOfficial
猜你喜欢
  • 1970-01-01
  • 2013-09-30
  • 2012-08-02
  • 2010-10-25
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多