您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么為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庫擴展加密算法支持這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。