Lua或C的等效函数是System.Web.Helpers.Crypto.VerifyHashedPassword。
2016-5-5 2:56:3
收藏:0
阅读:99
评论:2
我正在寻找 Lua 或 C 语言的等价于 .NET 方法 System.Web.Helpers.Crypto.VerifyHashedPassword 的方法。我要解决的问题是密码哈希由 .NET 应用程序创建,但需要由 Lua 应用程序处理身份验证。
.NET 类的源代码可以在 这里 找到,但似乎重建这个类在 Lua 或 C 中会非常深入和困难。
Lua 中现有的加密库似乎不能解决这个问题。
任何帮助都将受到赞赏!
点赞
用户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/moteus/lua-bgcrypto-sha/blob/master/src/lua/pbkdf2.lua
- https://github.com/bungle/lua-resty-nettle/blob/master/lib/resty/nettle/pbkdf2.lua
有关基本编码实用程序,请查看 https://github.com/aiq/basexx 以获取纯 Lua 实现。
您链接的框架确实提供了一些基本的加密单元测试向量 here。您可以使用它来测试自己的实现,以确保它具有相同的行为。
我曾经在纯 Lua 中编写过自己的 PBKDF2 实现,目的是进行 WiFi WPA 破解的练习。如果您有兴趣,我可以分享它。
2015-03-28 07:39:40
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
可以选择任意的库/代码/其他,比如 https://www.gnu.org/software/libc/manual/html_node/crypt.html (谷歌搜索 “c md5 library” 的结果)。然后,只需对输入密码进行散列(重要:与密码加密时使用的哈希算法相同。很可能是 md5,如上所猜测 - 如果不是 md_5 - 没有关系,你有它的源代码,找出它使用的哈希算法),然后比较字节数组 - 如果它们完全匹配,则密码要么正确,要么至少存在冲突 - 如果它们不完全匹配,则是错误密码。