skynet 支持 sha256
方案 :替换 / 扩展 crypt C 库(第三方补丁)
社区扩展库 skynet-lua-crypt 给 crypt.so 增加 sha256/hmac_sha256,兼容 v1.2+ 所有稳定版:
替换 lualib-src/lua-crypt.c、新增 lsha2.c/lsha2.h
Makefile 编译 crypt.so 时带上 sha2 源码
调用 crypt.sha256(str)、crypt.hmac_sha256(key, data)
测试代码
-- https://lzltool.com/data-hmacsha256 -- 标准 sha256("abc") = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad -- 标准 hmac_sha256("abc","abc") = 2f02e24ae2e1fe880399f27600afa88364e6062bf9bbe114b32fa8f23d03608a local crypt = require "skynet.crypt" -- 二进制转16进制字符串 local function bin2hex(bin) local hex = "" for i=1,#bin do hex = hex .. string.format("%02x", bin:byte(i)) end return hex end -- 计算 SHA256 print(bin2hex(crypt.sha256("abc"))) -- 计算 HMAC-SHA256 local hmac = crypt.hmac_sha256("abc", "abc") print(bin2hex(hmac))完美符合
仓库地址: http://gitmemories.com/CandyMi/skynet-lua-crypt
配套原版讲解文章(SegmentFault 完整改造教程)
https://segmentfault.com/a/1190000019647848
文章完整讲解:
lsha2 源码来源与裁剪逻辑
修改 Makefile 加入 lsha2.c 编译
lua-crypt.c 新增 sha256、hmac_sha256 注册代码
编译踩坑修复步骤
注意可能skynet版本可能不一致,覆盖后,要自己对比修改,有一些可以还原,只修改必要的修改,防止版本兼容问题。
