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