Lua或C的等效函数是System.Web.Helpers.Crypto.VerifyHashedPassword。

我正在寻找 Lua 或 C 语言的等价于 .NET 方法 System.Web.Helpers.Crypto.VerifyHashedPassword 的方法。我要解决的问题是密码哈希由 .NET 应用程序创建,但需要由 Lua 应用程序处理身份验证。

.NET 类的源代码可以在 这里 找到,但似乎重建这个类在 Lua 或 C 中会非常深入和困难。

Lua 中现有的加密库似乎不能解决这个问题。

任何帮助都将受到赞赏!

点赞
用户2467582
用户2467582

可以选择任意的库/代码/其他,比如 https://www.gnu.org/software/libc/manual/html_node/crypt.html (谷歌搜索 “c md5 library” 的结果)。然后,只需对输入密码进行散列(重要:与密码加密时使用的哈希算法相同。很可能是 md5,如上所猜测 - 如果不是 md_5 - 没有关系,你有它的源代码,找出它使用的哈希算法),然后比较字节数组 - 如果它们完全匹配,则密码要么正确,要么至少存在冲突 - 如果它们不完全匹配,则是错误密码。

2015-03-28 06:31:28
用户234175
用户234175

我认为 Lua 中没有现成的等效实现。从 C# 实现中看,文档写得很好,所以将实现移植到 Lua 或 C 应该不会太难。

好消息是,.NET 实现中使用的加密基元可用,所以不需要重新编写这些部分。特别是,您需要:

  • 来自 rfc2898 的 PBKDF2 密钥派生函数。
  • 作为底层哈希函数的 PBKDF2 中使用的 SHA1。根据您的要求,您可能也需要其中的 SHA256,但是 PBKDF2 本身旨在保持哈希函数的通用性。按照 rfc2898 规范,默认使用 SHA1。
  • Base32/64 编码解码函数。从源代码中可以看出,“hashedPassword” 应为 base64。

还要注意这个重要的注释:

    /* =======================
     * HASHED PASSWORD FORMATS
     * =======================
     *
     * Version 0:
     * PBKDF2 with HMAC-SHA1, 128-bit salt, 256-bit subkey, 1000 iterations.
     * (See also: SDL crypto guidelines v5.1, Part III)
     * Format: { 0x00, salt, subkey }
     */

现在有几个 PBKDF2 Lua 实现:

有关基本编码实用程序,请查看 https://github.com/aiq/basexx 以获取纯 Lua 实现。

您链接的框架确实提供了一些基本的加密单元测试向量 here。您可以使用它来测试自己的实现,以确保它具有相同的行为。

我曾经在纯 Lua 中编写过自己的 PBKDF2 实现,目的是进行 WiFi WPA 破解的练习。如果您有兴趣,我可以分享它。

2015-03-28 07:39:40