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

时间:2015-03-28 04:41:07

标签: c# .net c lua cryptography

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

.NET类的源代码可用here但似乎在Lua或C中重建将会相当深入和困难。

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

感谢任何帮助!

2 个答案:

答案 0 :(得分: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破解的练习。如果您对此感兴趣,我可以分享。

答案 1 :(得分:0)

拿任何图书馆/代码/等等,比如https://www.gnu.org/software/libc/manual/html_node/crypt.html(谷歌上的第一个结果' c md5库')然后简单地哈希输入密码(重要的是:相同的哈希算法)密码是加密的。可能是md5,正如我上面猜到的 - 如果它不是md_5 - 那么,你有源代码,弄清楚它是什么)并比较字节数组 - 如果它们完全匹配,密码是正确的还是至少是碰撞 - 如果密码不完全匹配,则密码错误。