千家信息网

怎么为skynet的crypt库扩展加密算法支持

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"怎么为skynet的crypt库扩展加密算法支持",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么为skynet的crypt库扩展
千家信息网最后更新 2026年11月02日怎么为skynet的crypt库扩展加密算法支持

这篇文章主要讲解了"怎么为skynet的crypt库扩展加密算法支持",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么为skynet的crypt库扩展加密算法支持"吧!

改造起因

在上篇文章, 我描述了为skynet添加稳定的websocket支持的起始并阐述了这么做的原因.

这几天在测试的时候发现, 当使用skynet内置的httpc库的时候会遇见crypt缺少一些我需要用到的算法(例如: crc、sha256、hmac_sha256等等).

这里完全可以假设开发者在框架选型的时候没发现这个问题, 那可能会到开发中期需要第三方平台接入或扩展不同架构的时候才可能会发现了.

显然这将会在无形之中就会给一个项目引入不可预料的稳定性因素. 为了尽可能的避免这个因素, 扩展一些常见的加密(摘要)算法支持是必不可少的.

首选方案肯定使用已经成熟的库. 但是很可惜, lua5.3没有较为可靠并且现成的实现库可以fork后直接使用.

而且可以用来参考的库仅有: luajit利用ffi实现的库、OpenSSL的实现. 然而这些无法直接或间接移植到lua 5.3.

这是目前遇到的最坏的情况! 最终, 我们只能用Lua的C API来粘合C语言的Crypt实现来完成Lua版本的Crypt扩展库改造工作.

改造开始

我在网上寻找一段时间后发现一个比较不错的Lua sha实现.

这份代码包含md5、sha128、sha384、sha512的C实现, 其用大量的宏来完成Lua注入动作. 可见我们需要做的第一件事情就是去掉这些不易阅读的宏定义.

我们知道skynet的luaclib-src/lsha1.c文件中已经存在了一份sha1实现. 那么我们可以保留sha1, 仅仅提取sha2部分的sha256与sha512的实现.

sha2在改造成标准Lua Model实现后可维护性大大提升, 我们将其命名为lsha2.c与lsha2.h来描述显然再好不过. 这时候, 我们已经可以使用这些算法进行测试了.

大家都知道HMAC是一种哈希算法, 目前这种哈希算法的hmac_256与hmac_512实现已经在很多云平台广为使用. 一个较为明显的例子就是腾讯云.

在lsha1.c的文件内已经有了一份HMAC实现代码, 我们将xor_str算法拷贝到lsha2文件中. 就可以简单的完成扩展.

这里需要知道的是, sha128与sha256的Block都可以使用64, 但是hmac_sha512的block的长度是128. 所以我们为它单独在内部多写了一份代码方便维护.

参照lsha1.c的hmac_sha128实现方法扩展hmac_256与hmac_512非常简单. 基本上就是改block与Lua Model编写. 很快就能完成.

skynet的3rd目录下已经支持md5. 虽然不知道大家怎么用的, 但是我使用起来感觉非常不便. 并且crypt库支持的hmac64_md5目前与其它语言对接也较为不便.

最后我们索性上面提到的代码创建lmd5.c文件实现一份md5的算法, 然后参照上面的hmac算法又实现了一份hmac_md5. 这样能让所有算法并存于crypt库内部.

当你看到这里! 你肯定以为, 我们的工作已经完成了! 然而这还不够, 既然已经开始动手. 那么一些常见的算法必将都要被纳入进来.

我们最后尝试从redis的源码文件中拿到crc32与crc64的源码, 然后直接提取出来改造成为一个单独的lcrc.c文件并为其注入Lua C API.

以上, 完成了crypt的基本改造.

改造结果

目前测试结果在其它语言集上内容输出一致. 由于实现使用到是C语言, 性能表现方面自然强过一些lua实现. 所以不用过多考虑性能都问题.

既然已经开源了一份Websocket实现, 那么干脆也开源这份代码吧! 至于命名就延续之前的命名: skynet-lua-crypt.

安装方法

由于改造涉及到了skynet的luaclib-src内的文件修改, 所以编译方法肯定不能是普通的3rd方式就能完成编译的.

而且skynet的一些文件内部也使用到了这个库, 我们需要直接修改skynet的Makefile文件完成这个替换动作. 这样能保证编果更加顺利.

为了跟进版本. 我拉取了skynet的1.2版本代码进行测试, 经过我的MacBook Pro编译与skynet/test/testsha.lua文件测试通过并且无副作用.

感谢各位的阅读,以上就是"怎么为skynet的crypt库扩展加密算法支持"的内容了,经过本文的学习后,相信大家对怎么为skynet的crypt库扩展加密算法支持这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

算法 文件 支持 改造 代码 加密 测试 就是 时候 语言 内容 方法 版本 问题 学习 编译 肯定 不便 动作 因素 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 科技和互联网公司 互联网扶贫科技 浩特互联网科技 宜安科技 互联网金融 科技互联网公司logo 一五八零互联网科技 科技类的互联网平台 成都仁贤领冠互联网科技有限公司 湖南一路畅行互联网科技 互联网5g黑科技有哪些 互联网时代的科技公司 互联网金融科技公司的优势 互联网与数字科技关系 35岁以上互联网科技行业 九思连强互联网电子科技有限公司 银川新华互联网科技学校是国营吗 众联互联网络科技 绵阳真晨互联网科技有限公司 互联网金融金融科技 艾特科技互联网 成都玖崟互联网科技有限公司乐商圈怎么样 新兴科技互联网创新大赛颁奖典礼 苏州铭阳互联网科技有限公司 明优互联网科技有限公司 江苏互联网科技小贷 美国五大互联网科技公司市值多少 科技互联网公司两年变化 杭州融税互联网科技有限公司 互联网金融金融科技
0