【问题标题】:Lua or C equivalent to System.Web.Helpers.Crypto.VerifyHashedPassword [closed]Lua 或 C 等效于 System.Web.Helpers.Crypto.VerifyHashedPassword [关闭]
【发布时间】:2015-06-01 13:15:53
【问题描述】:

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

.NET 类的源代码是可用的 here,但它似乎会变得相当深,并且很难在 Lua 或 C 中快速重建。

Lua 中的现有加密库似乎无法解决此问题。

感谢任何帮助!

【问题讨论】:

    标签: c# .net c lua cryptography


    【解决方案1】:

    我认为 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 破解的练习。如果你有兴趣,我可以分享。

    【讨论】:

    • 这是一个很大的帮助。当我在深夜看到这样做时,不清楚需要做什么,但走开并阅读您的 cmets 有助于清除我的头脑。我正在着手实施,并将分享结果。如果您想分享您的 PBKDF2 实现,那么很高兴看到另一个选项。
    【解决方案2】:

    取任何库/代码/任何东西,比如https://www.gnu.org/software/libc/manual/html_node/crypt.html(谷歌上的第一个结果是'c md5 library')然后简单地对输入密码进行哈希处理(重要:与密码加密的哈希算法相同。可能是md5,正如我在上面猜到的那样——如果不是 md_5——好吧,你有它的源代码,找出它是什么 alg)并比较字节数组——如果它们完全匹配,那么密码要么正确,要么在至少 - 如果它们不完全匹配,则密码错误。

    【讨论】:

    • 这是 PBKDF2-HMAC-SHA-1,不是 MD5。
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多