C# 等同于System.Web.Helpers.Crypto.VerifyHashedPassword的Lua或C

C# 等同于System.Web.Helpers.Crypto.VerifyHashedPassword的Lua或C,c#,.net,c,lua,cryptography,C#,.net,C,Lua,Cryptography,我正在寻找与.NET方法System.Web.Helpers.Crypto.VerifyHashedPassword等效的Lua或C。我要解决的问题是.NET应用程序正在创建密码哈希,但需要一个Lua应用程序来处理身份验证 NET类的源代码是可用的,但它似乎会变得相当深入,并且很难在Lua或C中快速重建 Lua中现有的加密库似乎无法解决这个问题 感谢您的帮助 取任何库/代码/任何东西,比方说,(谷歌上的第一个“c md5库”结果),然后简单地对输入密码进行散列(重要提示:与密码加密时使用的散列a

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

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

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


感谢您的帮助

取任何库/代码/任何东西,比方说,(谷歌上的第一个“c md5库”结果),然后简单地对输入密码进行散列(重要提示:与密码加密时使用的散列alg相同。可能是md5,正如我上面猜测的-如果不是md5-那么,你有它的源代码,弄清楚它是什么alg)比较字节数组-如果它们完全匹配,那么密码要么正确,要么至少是冲突-如果它们不完全匹配,那么密码是错误的。

我认为没有一个完全等效的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实现:

对于基本编码实用程序,请查看纯lua实现

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


我确实用纯lua编写了自己的PBKDF2实现,作为wifi WPA破解的练习。如果您对它感兴趣,我可以与您分享。

它是PBKDF2-HMAC-SHA-1,而不是MD5。这是一个很大的帮助。当我在深夜看到这样做时,并不清楚需要做什么,但走开,阅读你的评论有助于我理清思路。我在路上,将分享结果。如果您想共享您的PBKDF2实现,那么最好看到另一个选项。