中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么為skynet的crypt庫擴展加密算法支持

發布時間:2021-11-16 14:08:04 來源:億速云 閱讀:261 作者:iii 欄目:大數據

這篇文章主要講解了“怎么為skynet的crypt庫擴展加密算法支持”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么為skynet的crypt庫擴展加密算法支持”吧!

改造起因

在上篇文章, 我描述了為skynet添加穩定的websocket支持的起始并闡述了這么做的原因.

這幾天在測試的時候發現, 當使用skynet內置的httpc庫的時候會遇見crypt缺少一些我需要用到的算法(例如: crcsha256hmac_sha256等等).

這里完全可以假設開發者在框架選型的時候沒發現這個問題, 那可能會到開發中期需要第三方平臺接入或擴展不同架構的時候才可能會發現了.

顯然這將會在無形之中就會給一個項目引入不可預料的穩定性因素. 為了盡可能的避免這個因素, 擴展一些常見的加密(摘要)算法支持是必不可少的.

首選方案肯定使用已經成熟的庫. 但是很可惜, lua5.3沒有較為可靠并且現成的實現庫可以fork后直接使用.

而且可以用來參考的庫僅有: luajit利用ffi實現的庫、OpenSSL的實現. 然而這些無法直接或間接移植到lua 5.3.

這是目前遇到的最壞的情況! 最終, 我們只能用Lua的C API來粘合C語言的Crypt實現來完成Lua版本的Crypt擴展庫改造工作.

改造開始

我在網上尋找一段時間后發現一個比較不錯的Lua sha實現.

這份代碼包含md5sha128sha384sha512的C實現, 其用大量的宏來完成Lua注入動作. 可見我們需要做的第一件事情就是去掉這些不易閱讀的宏定義.

我們知道skynetluaclib-src/lsha1.c文件中已經存在了一份sha1實現. 那么我們可以保留sha1, 僅僅提取sha2部分的sha256sha512的實現.

sha2在改造成標準Lua Model實現后可維護性大大提升, 我們將其命名為lsha2.clsha2.h來描述顯然再好不過. 這時候, 我們已經可以使用這些算法進行測試了.

大家都知道HMAC是一種哈希算法, 目前這種哈希算法的hmac_256hmac_512實現已經在很多云平臺廣為使用. 一個較為明顯的例子就是騰訊云.

lsha1.c的文件內已經有了一份HMAC實現代碼, 我們將xor_str算法拷貝到lsha2文件中. 就可以簡單的完成擴展.

這里需要知道的是, sha128sha256的Block都可以使用64, 但是hmac_sha512block的長度是128. 所以我們為它單獨在內部多寫了一份代碼方便維護.

參照lsha1.chmac_sha128實現方法擴展hmac_256hmac_512非常簡單. 基本上就是改block與Lua Model編寫. 很快就能完成.

skynet的3rd目錄下已經支持md5. 雖然不知道大家怎么用的, 但是我使用起來感覺非常不便. 并且crypt庫支持的hmac64_md5目前與其它語言對接也較為不便.

最后我們索性上面提到的代碼創建lmd5.c文件實現一份md5的算法, 然后參照上面的hmac算法又實現了一份hmac_md5. 這樣能讓所有算法并存于crypt庫內部.

當你看到這里! 你肯定以為, 我們的工作已經完成了! 然而這還不夠, 既然已經開始動手. 那么一些常見的算法必將都要被納入進來.

我們最后嘗試從redis的源碼文件中拿到crc32crc64的源碼, 然后直接提取出來改造成為一個單獨的lcrc.c文件并為其注入Lua C API.

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

改造結果

目前測試結果在其它語言集上內容輸出一致. 由于實現使用到是C語言, 性能表現方面自然強過一些lua實現. 所以不用過多考慮性能都問題.

既然已經開源了一份Websocket實現, 那么干脆也開源這份代碼吧! 至于命名就延續之前的命名: skynet-lua-crypt.

安裝方法

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

而且skynet的一些文件內部也使用到了這個庫, 我們需要直接修改skynetMakefile文件完成這個替換動作. 這樣能保證編果更加順利.

為了跟進版本. 我拉取了skynet的1.2版本代碼進行測試, 經過我的MacBook Pro編譯與skynet/test/testsha.lua文件測試通過并且無副作用.

感謝各位的閱讀,以上就是“怎么為skynet的crypt庫擴展加密算法支持”的內容了,經過本文的學習后,相信大家對怎么為skynet的crypt庫擴展加密算法支持這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广州市| 瓮安县| 南雄市| 南岸区| 达尔| 申扎县| 黄陵县| 精河县| 都江堰市| 杂多县| 且末县| 景洪市| 沂南县| 伊宁县| 上高县| 稷山县| 南华县| 隆尧县| 博罗县| 新巴尔虎右旗| 鞍山市| 垫江县| 屏东市| 珠海市| 犍为县| 华池县| 巴彦淖尔市| 丁青县| 澄城县| 宜兰县| 青海省| 措勤县| 冷水江市| 德阳市| 全州县| 仁化县| 莱西市| 芜湖市| 清徐县| 民乐县| 惠来县|