今天是對加解密通用函數的深度解讀,我將詳細講解,建議收藏,不可錯過。
1、加解密概述
加解密算法是保證數據安全的基礎技術,無論是在數據傳輸、存儲,還是用戶身份驗證中,都起著至關重要的作用.隨著互聯網的發展和信息安全威脅的增加,了解并掌握常用的加解密算法已經成為開發者和安全從業者的必修課.
常見的15種加密解密算法分別是:
散列哈希[MD5、SHA1、CRC32],對稱[DES,3DES(TDEA、TripleDES),AES,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape。
三種分類:
1.1 對稱加密
對稱加密是指加密和解密使用同一個密鑰的加密方法.由于加密和解密過程中的密鑰相同,因此需要在通信雙方之間安全地共享密鑰.對稱加密的速度較快,適合用于大量數據的加密.
1.2 非對稱加密
非對稱加密算法采用一對密鑰:公鑰和私鑰.公鑰用于加密,私鑰用于解密.由于加密和解密使用不同的密鑰,非對稱加密算法解決了密鑰分發的問題,是當前加密系統中安全性最高的加密技術之一.
1.3 Hash算法
這是一種不可逆的算法,它常用于驗證數據的完整性。
2、請輸入標題
本文章通過Air780的核心板燒錄LuatOS示例代碼,來演示有關加解密的各種API的功能。
最新源碼下載:
https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/crypto
API的具體用法,讀者可以參考本文中的"五、API說明"。
3、硬件準備
3.1 Air780E核心板
使用Air780E核心板,如下圖所示:
此核心板的詳細使用說明參考:
https://docs.openluat.com/air780e/product/
Air780E產品手冊中的《開發板Core_Air780E使用說明VX.X.X.pdf》,寫這篇文章時最新版本的使用說明為:《開發板Core_Air780E使用說明V1.0.5.pdf》;核心板使用過程中遇到任何問題,可以直接參考這份使用說明pdf文檔。
3.2 SIM卡
中國大陸環境下,可以上網的sim卡,一般來說,使用移動,電信,聯通的物聯網卡或者手機卡都行。
3.3 PC電腦
WINDOWS系統。
3.4 數據通信線
4、軟件環境
4.1 Luatools工具
要想燒錄LuatOS到4G模組中,需要用到的調試工具:Luatools
詳細使用說明參考:
Luatools工具使用說明
https://docs.openluat.com/Luatools/
Luatools工具集具備以下幾大核心功能:
一鍵獲取最新固件:自動連接服務器,輕松下載最新的模組固件.
固件與腳本燒錄:便捷地將固件及腳本文件燒錄至目標模組中.
串口日志管理:實時查看模組通過串口輸出的日志信息,并支持保存功能.
串口調試助手:提供簡潔的串口調試界面,滿足基本的串口通信測試需求.
Luatools下載之后,新建一個命名為"Luatools"的文件夾,將下載的Luatools_v3.exe拷貝或移動到新建的Luatools文件夾內,點擊Luatools_v3.exe即可運行。
4.2 準備需要燒錄的代碼
首先要說明一點:腳本代碼,要和固件的soc文件一起燒錄。
4.2.1 燒錄的底層固件文件
底層core下載地址:
LuatOS固件版本下載地址
https://docs.openluat.com/air780e/luatos/firmware/
Air780E的底層固件在Luatools解壓后目錄的:
LuatOS-SoC_V1112_EC618_FULL.soc
4.2.2 燒錄的腳本代碼
首先要下載Air780的LuatOS示例代碼到一個合適的項目目錄,示例代碼網站:
https://gitee.com/openLuat/LuatOS-Air780E
下載流程參考下圖:
下載的文件解壓,找到
LuatOS-Air780E-masterdemocryptomain.lua,如圖:
5、API說明
5.1 crypto.md5(str)
計算md5值
傳入值類型 | 解釋 |
---|---|
string |
需要計算的字符串 |
返回值
返回值類型 | 解釋 |
---|---|
string |
計算得出的md5值的hex字符串 |
例子
5.2 crypto.hmac_md5(str,key)
計算hmac_md5值
參數
傳入值類型 | 解釋 |
---|---|
string |
需要計算的字符串 |
string |
密鑰 |
返回值
返回值類型 | 解釋 |
---|---|
string |
計算得出的hmac_md5值的hex字符串 |
例子
5.3 crypto.sha1(str)
計算sha1值
參數
傳入值類型 | 解釋 |
---|---|
string |
需要計算的字符串 |
返回值
返回值類型 | 解釋 |
---|---|
string |
計算得出的sha1值的hex字符串 |
例子
5.4 crypto.hmac_sha1(str,key)
計算hmac_sha1值
參數
傳入值類型 | 解釋 |
---|---|
string |
需要計算的字符串 |
string |
密鑰 |
返回值
返回值類型 | 解釋 |
---|---|
string |
計算得出的hmac_sha1值的hex字符串 |
例子
5.5 crypto.sha256(str)
計算sha256值
參數
傳入值類型 | 解釋 |
---|---|
string |
需要計算的字符串 |
返回值
返回值類型 | 解釋 |
---|---|
string |
計算得出的sha256值的hex字符串 |
例子
5.6 crypto.hmac_sha256(str,key)
計算hmac_sha256值
參數
傳入值類型 | 解釋 |
---|---|
string |
需要計算的字符串 |
string |
密鑰 |
返回值
返回值類型 | 解釋 |
---|---|
string |
計算得出的hmac_sha256值的hex字符串 |
例子
5.7 crypto.sha512(str)
計算sha512值
參數
傳入值類型 | 解釋 |
---|---|
string |
需要計算的字符串 |
返回值
返回值類型 | 解釋 |
---|---|
string |
計算得出的sha512值的hex字符串 |
例子
5.8 crypto.hmac_sha512(str,key)
計算hmac_sha512值
參數
傳入值類型 | 解釋 |
---|---|
string |
需要計算的字符串 |
string |
密鑰 |
返回值
返回值類型 | 解釋 |
---|---|
string |
計算得出的hmac_sha512值的hex字符串 |
例子
5.9 crypto.base64_encode(data)
將數據進行base64編碼
參數
傳入值類型 | 解釋 |
---|---|
string |
待編碼的數據 |
返回值
返回值類型 | 解釋 |
---|---|
string |
編碼后的數據 |
例子
5.10 crypto.base64_decode(data)
將數據進行base64解碼
參數
傳入值類型 | 解釋 |
---|---|
string |
待解碼的數據 |
返回值
返回值類型 | 解釋 |
---|---|
string |
解碼后的數據 |
例子
5.11 crypto.cipher_list()
獲取當前固件支持的cipher列表
參數
無
返回值
返回值類型 | 解釋 |
---|---|
table |
本固件支持的cipher列表,字符串數組 |
例子
5.12 crypto.cipher_suites()
獲取當前固件支持的ciphersuites列表
參數
無
返回值
返回值類型 | 解釋 |
---|---|
table |
本固件支持的ciphersuites列表,字符串數組 |
例子
5.13 crypto.cipher_encrypt(type,padding,str,key,iv)
對稱加密
參數
傳入值類型 | 解釋 |
---|---|
string |
算法名稱,例如AES-128-ECB/AES-128-CBC, 可查閱crypto.cipher_list() |
string |
對齊方式, 支持PKCS7/ZERO/ONE_AND_ZEROS/ ZEROS_AND_LEN/NONE |
string |
需要加密的數據 |
string |
密鑰,需要對應算法的密鑰長度 |
string |
IV值,非ECB算法需要 |
返回值
返回值類型 | 解釋 |
---|---|
string |
加密后的字符串 |
例子
5.14 crypto.cipher_decrypt(type,padding,str,key,iv)
對稱解密
參數
傳入值類型 | 解釋 |
---|---|
string |
算法名稱,例如AES-128-ECB/AES-128-CBC,可查閱crypto.cipher_list() |
string |
對齊方式,支持PKCS7/ZERO/ONE_AND_ZEROS/ZEROS_AND_LEN/NONE |
string |
需要解密的數據 |
string |
密鑰,需要對應算法的密鑰長度 |
string |
IV值,非ECB算法需要 |
返回值
返回值類型 | 解釋 |
---|---|
string |
解密后的字符串 |
例子
5.15 crypto.crc16
(method,data,poly,initial,finally,inReversemoutReverse)
計算CRC16
參數
傳入值類型 | 解釋 |
---|---|
string |
CRC16模式(”IBM”,”MAXIM”,”USB”,”MODBUS”,”CCITT”,”CCITT-FALSE”,”X25”,”XMODEM”,”DNP”,”USER-DEFINED”) |
string |
字符串 |
int |
poly值 |
int |
initial值 |
int |
finally值 |
int |
輸入反轉,1反轉,默認0不反轉 |
int |
輸入反轉,1反轉,默認0不反轉 |
返回值
返回值類型 | 解釋 |
---|---|
int |
對應的CRC16值 |
例子
5.16 crypto.crc16_modbus(data,start)
直接計算modbus的crc16值
參數
傳入值類型 | 解釋 |
---|---|
string |
數據 |
int |
初始化值,默認0xFFFF |
返回值
返回值類型 | 解釋 |
---|---|
int |
對應的CRC16值 |
例子
5.17 crypto.crc32(data)
計算crc32值
參數
傳入值類型 | 解釋 |
---|---|
string |
數據 |
返回值
返回值類型 | 解釋 |
---|---|
int |
對應的CRC32值 |
例子
5.18 crypto.crc8(data,poly,start,revert)
計算crc8值
參數
傳入值類型 | 解釋 |
---|---|
string |
數據 |
int |
crc多項式,可選,如果不寫,將忽略除了數據外所有參數 |
int |
crc初始值,可選,默認0 |
boolean |
是否需要逆序處理,默認否 |
返回值
返回值類型 | 解釋 |
---|---|
int |
對應的CRC8值 |
例子
5.19 crypto.crc7(data,poly,start)
計算crc7值
參數
傳入值類型 | 解釋 |
---|---|
string |
數據 |
int |
crc多項式,可選,默認0xE5 |
int |
crc初始值,可選,默認0x00 |
返回值
返回值類型 | 解釋 |
---|---|
int |
對應的CRC7值 |
例子
5.20 crypto.checksum(data,mode)
計算checksum校驗和
參數
傳入值類型 | 解釋 |
---|---|
string |
待計算的數據,必選 |
int |
模式,累加模式,0-異或,1-累加,默認為0 |
返回值
返回值類型 | 解釋 |
---|---|
int |
checksum值,校驗和 |
例子
5.21 crypto.trng(len)
生成真隨機數
參數
傳入值類型 | 解釋 |
---|---|
int |
數據長度 |
返回值
返回值類型 | 解釋 |
---|---|
string |
指定隨機數字符串 |
例子
5.22 crypto.totp(secret,time)
計算TOTP動態密碼的結果
參數
傳入值類型 | 解釋 |
---|---|
string |
網站提供的密鑰(就是BASE32編碼后的結果) |
int |
可選,時間戳,默認當前時間 |
返回值
返回值類型 | 解釋 |
---|---|
int |
計算得出的六位數結果計算失敗返回nil |
例子
5.23 crypto.md_file(tp,path,hmac)
計算文件的hash值(md5/sha1/sha256及hmac形式)
參數
傳入值類型 | 解釋 |
---|---|
string |
hash類型,大小字母,例如“MD5”“SHA1”“SHA256” |
string |
文件路徑,例如/luadb/logo.jpg |
string |
hmac值,可選 |
返回值
返回值類型 | 解釋 |
---|---|
string |
HEX過的hash值,若失敗會無返回值 |
例子
5.24 crypto.md(tp,data,hmac)
計算數據的hash值(md5/sha1/sha256及hmac形式)
參數
傳入值類型 | 解釋 |
---|---|
string |
hash類型,大小字母,例如“MD5”“SHA1”“SHA256” |
string |
待處理的數據 |
string |
hmac值,可選 |
返回值
返回值類型 | 解釋 |
---|---|
string |
HEX過的hash值,若失敗會無返回值 |
例子
5.25 crypto.hash_init(tp)
創建流式hash用的stream
參數
傳入值類型 | 解釋 |
---|---|
string |
hash類型,大寫字母,例如“MD5”“SHA1”“SHA256” |
string |
hmac值,可選 |
返回值
返回值類型 | 解釋 |
---|---|
userdata |
成功返回一個數據結構,否則返回nil |
例子
5.26 crypto.hash_update(stream,data)
流式hash更新數據
參數
傳入值類型 | 解釋 |
---|---|
userdata |
crypto.hash_init()創建的stream,必選 |
string |
待計算的數據,必選 |
return |
無 |
返回值
無
例子
5.27 crypto.hash_finish(stream)
獲取流式hash校驗值并釋放創建的stream
參數
傳入值類型 | 解釋 |
---|---|
userdata |
crypto.hash_init()創建的stream,必選 |
返回值
返回值類型 | 解釋 |
---|---|
string |
成功返回計算得出的流式hash值的hex字符串,失敗無返回 |
例子
6、功能驗證
6.1 燒錄固件
6.1.1 正確連接電腦和4G模組電路板
使用帶有數據通信功能的數據線,不要使用僅有充電功能的數據線.
6.1.2 識別4G模組的boot引腳
在下載之前,要用模組的boot引腳觸發下載,也就是說,要把4G模組的boot引腳拉到1.8v,或者直接把boot引腳和VDD_EXT引腳相連.我們要在按下BOOT按鍵時讓模塊開機,就可以進入下載模式了.
具體到Air780E開發板:
1、當我們模塊沒開機時,按著BOOT鍵然后長按POW開機.
2、當我們模塊開機時,按著BOOT鍵然后點按重啟鍵即可.
6.1.3 識別電腦的正確端口
判斷是否進入BOOT模式:模塊上電,此時在電腦的設備管理器中,查看串口設備,會出現一個端口表示進入了boot下載模式,如下圖所示:
6.1.4 用Luatools工具燒錄
新建項目
首先,確保你的Luatools的版本,大于等于3.0.6版本的.
在Luatools的左上角上有版本顯示的,如圖所示:
Luatools版本沒問題的話,就點擊Luatools右上角的“項目管理測試”按鈕,如下圖所示:
這時會彈出項目管理和燒錄管理的對話框,可以新建一個項目,如下圖:
開始燒錄
選擇780E板子對應的底層core和剛改的main.lua腳本文件.下載到板子中.
點擊下載后,我們需要進入boot模式才能正常下載.
如果沒進入boot模式會出現下圖情況:
進入boot模式下載,如圖:
6.2 例程
本庫有專屬demo,點此鏈接查看crypto的demo例子
6.3 對應log
7、總結
通過本章內容的學習,你可以學習到有關加解密算法的函數,例如:crypto.md5(str)、crypto.hmac_md5(str,key)、crypto.hmac_sha1(str,key)等等函數。
更多內容,敬請關注!
審核編輯 黃宇
-
4G
+關注
關注
15文章
5517瀏覽量
118974 -
模組
+關注
關注
6文章
1487瀏覽量
30360 -
加解密
+關注
關注
0文章
18瀏覽量
6517 -
LuatOS
+關注
關注
0文章
76瀏覽量
1936
發布評論請先 登錄
相關推薦
評論