乾貨分享:通用加解密函式(crypto),Air780E篇

电子老师傅發表於2024-11-10
一、加解密概述

加解密演算法是保證資料安全的基礎技術,無論是在資料傳輸、儲存,還是使用者身份驗證中,都起著至關重要的作用.隨著網際網路的發展和資訊保安威脅的增加,瞭解並掌握常用的加解密演算法已經成為開發者和安全從業者的必修課.

常見的15種加密解密演算法分別是:
雜湊雜湊[MD5、SHA1、CRC32],對稱[DES,3DES(TDEA、TripleDES),AES,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape。

三種分類:

1.1 對稱加密

對稱加密是指加密和解密使用同一個金鑰的加密方法.由於加密和解密過程中的金鑰相同,因此需要在通訊雙方之間安全地共享金鑰.對稱加密的速度較快,適合用於大量資料的加密.

1.2 Hash演算法

這是一種不可逆的演算法,它常用於驗證資料的完整性。

1.3 非對稱加密

非對稱加密演算法採用一對金鑰:公鑰和私鑰.公鑰用於加密,私鑰用於解密.由於加密和解密使用不同的金鑰,非對稱加密演算法解決了金鑰分發的問題,是當前加密系統中安全性最高的加密技術之一.

二、請輸入標題

本文章透過Air780的核心板燒錄LuatOS示例程式碼,來演示有關加解密的各種API的功能。

三、硬體準備

3.1 Air780E核心板

使用Air780E核心板,如下圖所示:

圖片

Air780E產品手冊中的《開發板Core_Air780E使用說明VX.X.X.pdf》,寫這篇文章時最新版本的使用說明為:《開發板Core_Air780E使用說明V1.0.5.pdf》;核心板使用過程中遇到任何問題,可以直接參考這份使用說明pdf文件。

3.2 SIM卡

中國大陸環境下,可以上網的sim卡,一般來說,使用移動,電信,聯通的物聯網路卡或者手機卡都行。

3.3 資料通訊線

帶TYPE-C口的USB資料線。

3.4 PC電腦

WINDOWS系統。

四、軟體環境

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-master\demo\crypto\main.lua,如圖:

圖片

五、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.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

圖片

七、總結

透過本章內容的學習,你可以學習到有關加解密演算法的函式,例如:crypto.md5(str)、crypto.hmac_md5(str,key)、crypto.hmac_sha1(str,key)等等函式。

相關文章