跳转至

06 通用加解密函数(crypto)

作者:沈园园

一、加解密概述

加解密算法是保证数据安全的基础技术,无论是在数据传输、存储,还是用户身份验证中,都起着至关重要的作用.随着互联网的发展和信息安全威胁的增加,了解并掌握常用的加解密算法已经成为开发者和安全从业者的必修课。

常见的 15 种加密解密算法分别是:散列哈希[MD5、SHA1、CRC32],对称[DES,3DES(TDEA、Triple DES),AES、,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape。

【三种分类】

1、对称加密:对称加密是指加密和解密使用同一个密钥的加密方法.由于加密和解密过程中的密钥相同,因此需要在通信双方之间安全地共享密钥.对称加密的速度较快,适合用于大量数据的加密

2、非对称加密:非对称加密算法采用一对密钥:公钥和私钥.公钥用于加密,私钥用于解密.由于加密和解密使用不同的密钥,非对称加密算法解决了密钥分发的问题,是当前加密系统中安全性最高的加密技术之一。

3、Hash 算法,这是一种不可逆的算法,它常用于验证数据的完整性。

二、演示功能概述

演示有关加解密的各种 API 的功能包含MD5,SHA,哈希(MD5,SHA),AES/DEC/3DES,CRC,checksum校验和。

三、准备硬件环境

1、Air780EHV核心板一块

2、TYPE-C USB数据线一根

3、Air780EHV核心板和数据线的硬件接线方式为

  • Air780EHV核心板通过TYPE-C USB口连接TYPE-C USB 数据线,数据线的另外一端连接电脑的USB口;
  • 核心板正面的 ON/OFF 拨动开关 拨到ON一端;

四、准备软件环境

4.1 软件环境

在开始实践本示例之前,先筹备一下软件环境:

1、烧录工具:Luatools 下载调试工具

2、内核固件:Air780EHV 最新版本的内核固件

3、脚本文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air780EHM_Air780EHV_Air780EGH/demo/crypto

4、lib脚本文件:使用Luatools烧录时,勾选 添加默认lib 选项,使用默认lib脚本文件

准备好软件环境之后,接下来查看如何烧录项目文件到Air780EHV核心板,将本篇文章中演示使用的项目文件烧录到780EHV核心板中。

4.2 API 介绍

crypto库:https://docs.openluat.com/osapi/core/crypto/

五、程序结构

crypto/
│── main.lua
│── crypto_app.lua
│── logo.jpg
│── readme.md

5.1 文件说明

  1. main.lua:主程序入口文件。
  2. crypto_app.lua:演示有关加解密的各种 API 的功能包含MD5,SHA,哈希(MD5,SHA),AES/DEC/3DES,CRC,checksum校验和。
  3. logo.jpg:待加密文件。

六、代码详解

6.1 main.lua

主程序文件 main.lua 是整个项目的入口点。它负责初始化系统环境。

6.2 logo.jpg

logo.jpg待加密文件。

6.3 crypto_app.lua

演示有关加解密的各种 API 的功能包含MD5,SHA,哈希(MD5,SHA),AES/DEC/3DES,CRC,checksum校验和。

6.3.1 散列哈希MD5,SHA

-- MD5/哈希MD5,输出结果已经hex编码
log.info("md5", crypto.md5("abc"))
log.info("hmac_md5", crypto.hmac_md5("abc", "1234567890"))

-- SHA1/哈希SHA1,输出结果已经hex编码
log.info("sha1", crypto.sha1("abc"))
log.info("hmac_sha1", crypto.hmac_sha1("abc", "1234567890"))

-- SHA256/哈希SHA256,输出结果已经hex编码
log.info("sha256", crypto.sha256("abc"))
log.info("hmac_sha256", crypto.hmac_sha256("abc", "1234567890"))

-- SHA512/哈希SHA512,输出结果已经hex编码
log.info("sha512", crypto.sha512("abc"))
log.info("hmac_sha512", crypto.hmac_sha512("abc", "1234567890"))

6.3.2 对称AES,DEC,3DES

-- AES加密, 未经Hex编码. AES-128-ECB 算法 对称加密,对齐方式:"ZERO"
local data_encrypt = crypto.cipher_encrypt("AES-128-ECB", "ZERO", "023001", "HZBIT@WLW/YSBKEY")
    log.info("AES", "aes-128-ecb", data_encrypt:toHex())
    local data_decrypt = crypto.cipher_decrypt("AES-128-ECB", "ZERO", data_encrypt, "HZBIT@WLW/YSBKEY")
    log.info("AES", "aes-128-ecb", data_decrypt)

-- AES加密, 未经Hex编码. AES-128-ECB/CBC 算法 对称加密,对齐方式:"PKCS7"
local data_encrypt = crypto.cipher_encrypt("AES-128-ECB", "PKCS7", "12345678901234 > 123456", "1234567890123456")
local data2_encrypt = crypto.cipher_encrypt("AES-128-CBC", "PKCS7", "12345678901234 > 123456", "1234567890123456", "1234567890666666")
log.info("AES", "aes-128-ecb", data_encrypt:toHex())
log.info("AES", "aes-128-cbc", data2_encrypt:toHex())

-- AES解密, 未经Hex编码, AES-128-ECB/CBC 算法 对称解密,,对齐方式:"PKCS7"
local data_decrypt = crypto.cipher_decrypt("AES-128-ECB", "PKCS7", data_encrypt, "1234567890123456")
local data2_decrypt = crypto.cipher_decrypt("AES-128-CBC", "PKCS7", data2_encrypt, "1234567890123456", "1234567890666666")
log.info("AES", "aes-128-ecb", data_decrypt)
log.info("AES", "aes-128-cbc", data2_decrypt)
log.info("mem", rtos.meminfo("sys"))

-- DES-ECB 加解密
local data1 = crypto.cipher_encrypt("DES-ECB", "PKCS7", "abcdefg", "12345678")
if data1 then 
    log.info("des", data1:toHex())
    local data2 = crypto.cipher_decrypt("DES-ECB", "PKCS7", data1, "12345678")
    log.info("des", data2)
else
    log.info("des", "当前固件不支持DES/3DES")
end

-- 3DES-ECB 加解密
local data1 = crypto.cipher_encrypt("DES-EDE3-ECB", "PKCS7", "abcdefg!!--ZZSS", "123456781234567812345678")
if data1 then 
    log.info("3des", data1:toHex())
    local data2 = crypto.cipher_decrypt("DES-EDE3-ECB", "PKCS7", data1, "123456781234567812345678")
    log.info("3des", data2)
else
    log.info("3des", "当前固件不支持DES/3DES")
end

6.3.3 计算CRC16,CRC32,CRC8,CRC7

-- 计算CRC16
local originStr = "123456sdfdsfdsfdsffdsfdsfsdfs1234"
local crc16 = crypto.crc16("MODBUS",originStr)
log.info("crc16", crc16)

-- 计算CRC16 modbus
local crc16 = crypto.crc16_modbus("123456sdfdsfdsfdsffdsfdsfsdfs1234")
log.info("crc16", crc16)
crc16 = crypto.crc16_modbus("123456sdfdsfdsfdsffdsfdsfsdfs1234", 0xFFFF)
log.info("crc16", crc16)

-- 计算CRC32
local data = "123456sdfdsfdsfdsffdsfdsfsdfs1234" 
local crc32 = crypto.crc32(data)
log.info("crc32", crc32) --21438764
-- start和poly可选, 是 2025.4.14 新增的参数
local crc32 = crypto.crc32(data, 0xFFFFFFFF, 0x04C11DB7, 0xFFFFFFFF) --等同于crypto.crc32(data)
log.info("crc32", crc32)

-- 计算CRC8
local data= "sdfdsfdsfdsffdsfdsfsdfs1234"
local crc8 = crypto.crc8(data)
log.info("crc8", crc8)
local crc8 = crypto.crc8(data, 0x31, 0xff, false)
log.info("crc8", crc8)  

-- 计算CRC7
if crypto.crc7 then
    local result = crypto.crc7("abc", 0xE5, 0x00)
    log.info("crc7", result, string.format("%02X", result))  --50 32
else
    log.info("crypto", "当前固件不支持crypto.crc7")
end

6.3.4 随机数和totp的密钥

log.info("随机数测试")
for i=1, 10 do
    sys.wait(100)
    log.info("crypto", "真随机数",string.unpack("I",crypto.trng(4)))
    -- log.info("crypto", "伪随机数",math.random()) -- 输出的是浮点数,不推荐
    -- log.info("crypto", "伪随机数",math.random(1, 65525)) -- 不推荐
end

-- totp的密钥
log.info("totp的密钥")
local secret = "VK54ZXPO74ISEM2E"
--写死时间戳用来测试
local ts = 1646796576
--生成十分钟的动态码验证下
for i=1,600,30 do
    local r = crypto.totp(secret,ts+i)
    local time = os.date("*t",ts+i + 8*3600)--东八区
    log.info("totp", string.format("%06d" ,r),time.hour,time.min,time.sec)
end

6.3.5 数据进行base64编码,解码

--将数据进行base64编码
-- 本函数与 string.toBase64 是同一个
local bdata = crypto.base64_encode("123")
log.info("base64", "encode", bdata)

--将数据进行base64解码
-- 本函数与 string.fromBase64 是同一个
local data = crypto.base64_decode("MTIz")
log.info("base64", "decode", bdata, data)--123 

6.6.6 打印所有支持的cipher,cipher suites

-- 打印所有支持的cipher
if crypto.cipher_list then
    log.info("cipher", "list", json.encode(crypto.cipher_list()))
else
    log.info("cipher", "当前固件不支持crypto.cipher_list")
end
-- 打印所有支持的cipher suites
if crypto.cipher_suites then
    log.info("cipher", "suites", json.encode(crypto.cipher_suites()))
else
    log.info("cipher", "当前固件不支持crypto.cipher_suites")
end

6.3.7 计算文件/数据的hash值(md5/sha1/sha256及hmac形式)

-- 计算文件的hash值(md5/sha1/sha256及hmac形式)
log.info("文件hash值测试")
if crypto.md_file then
    -- 无hmac的hash值
    log.info("md5", crypto.md_file("MD5", "/luadb/logo.jpg"))
    log.info("sha1", crypto.md_file("SHA1", "/luadb/logo.jpg"))
    log.info("sha256", crypto.md_file("SHA256", "/luadb/logo.jpg"))

    -- 带hmac的hash值
    log.info("hmac_md5", crypto.md_file("MD5", "/luadb/logo.jpg", "123456"))
    log.info("hmac_sha1", crypto.md_file("SHA1", "/luadb/logo.jpg", "123456"))
    log.info("hmac_sha256", crypto.md_file("SHA256", "/luadb/logo.jpg", "123456"))
else
    log.info("文件hash值测试", "当前固件不支持crypto.md_file")
end

--计算数据的hash值(md5/sha1/sha256及hmac形式)
if crypto.md then
    -- 无hmac的hash值
    log.info("md5", crypto.md("MD5", "1234567890"))
    log.info("sha1", crypto.md("SHA1", "1234567890"))
    log.info("sha256", crypto.md("SHA256", "1234567890"))

    -- 带hmac的hash值
    log.info("hmac_md5", crypto.md("MD5", "1234567890", "123456"))
    log.info("hmac_sha1", crypto.md("SHA1", "1234567890", "123456"))
    log.info("hmac_sha256", crypto.md("SHA256", "1234567890", "123456"))
else
    log.info("数据hash值测试", "当前固件不支持crypto.md")    
end

6.3.8 流式hash测试

-- 流式hash测试
log.info("流式hash测试")
if crypto.hash_init then
    -- MD5
    local md5_obj = crypto.hash_init("MD5")
    crypto.hash_update(md5_obj, "1234567890")
    crypto.hash_update(md5_obj, "1234567890")
    crypto.hash_update(md5_obj, "1234567890")
    crypto.hash_update(md5_obj, "1234567890")
    local md5_result = crypto.hash_finish(md5_obj)
    log.info("md5_stream", md5_result)
    log.info("md5", crypto.md5("1234567890123456789012345678901234567890"))

    -- HMAC_MD5
    local hmac_md5_obj = crypto.hash_init("MD5", "1234567890")
    crypto.hash_update(hmac_md5_obj, "1234567890")
    crypto.hash_update(hmac_md5_obj, "1234567890")
    crypto.hash_update(hmac_md5_obj, "1234567890")
    crypto.hash_update(hmac_md5_obj, "1234567890")
    local hmac_md5_result = crypto.hash_finish(hmac_md5_obj)
    log.info("hmac_md5_stream", hmac_md5_result)
    log.info("hmac_md5", crypto.hmac_md5("1234567890123456789012345678901234567890", "1234567890"))

    -- SHA1
    local sha1_obj = crypto.hash_init("SHA1")
    crypto.hash_update(sha1_obj, "1234567890")
    crypto.hash_update(sha1_obj, "1234567890")
    crypto.hash_update(sha1_obj, "1234567890")
    crypto.hash_update(sha1_obj, "1234567890")
    local sha1_result = crypto.hash_finish(sha1_obj)
    log.info("sha1_stream", sha1_result)
    log.info("sha1", crypto.sha1("1234567890123456789012345678901234567890"))

    -- HMAC_SHA1
    local hmac_sha1_obj = crypto.hash_init("SHA1", "1234567890")
    crypto.hash_update(hmac_sha1_obj, "1234567890")
    crypto.hash_update(hmac_sha1_obj, "1234567890")
    crypto.hash_update(hmac_sha1_obj, "1234567890")
    crypto.hash_update(hmac_sha1_obj, "1234567890")
    local hmac_sha1_result = crypto.hash_finish(hmac_sha1_obj)
    log.info("hmac_sha1_stream", hmac_sha1_result)
    log.info("hmac_sha1", crypto.hmac_sha1("1234567890123456789012345678901234567890", "1234567890"))

    -- SHA256
    local sha256_obj = crypto.hash_init("SHA256")
    crypto.hash_update(sha256_obj, "1234567890")
    crypto.hash_update(sha256_obj, "1234567890")
    crypto.hash_update(sha256_obj, "1234567890")
    crypto.hash_update(sha256_obj, "1234567890")
    local sha256_result = crypto.hash_finish(sha256_obj)
    log.info("sha256_stream", sha256_result)
    log.info("sha256", crypto.sha256("1234567890123456789012345678901234567890"))

    -- HMAC_SHA256
    local hmac_sha256_obj = crypto.hash_init("SHA256", "1234567890")
    crypto.hash_update(hmac_sha256_obj, "1234567890")
    crypto.hash_update(hmac_sha256_obj, "1234567890")
    crypto.hash_update(hmac_sha256_obj, "1234567890")
    crypto.hash_update(hmac_sha256_obj, "1234567890")
    local hmac_sha256_result = crypto.hash_finish(hmac_sha256_obj)
    log.info("hmac_sha256_stream", hmac_sha256_result)
    log.info("hmac_sha256", crypto.hmac_sha256("1234567890123456789012345678901234567890", "1234567890"))

    -- SHA512
    local sha512_obj = crypto.hash_init("SHA512")
    if sha512_obj then
        crypto.hash_update(sha512_obj, "1234567890")
        crypto.hash_update(sha512_obj, "1234567890")
        crypto.hash_update(sha512_obj, "1234567890")
        crypto.hash_update(sha512_obj, "1234567890")
        local sha512_result = crypto.hash_finish(sha512_obj)
        log.info("sha512_stream", sha512_result)
        log.info("sha512", crypto.sha512("1234567890123456789012345678901234567890"))
    end

    -- HMAC_SHA512
    local hmac_sha512_obj = crypto.hash_init("SHA512", "1234567890")
    if hmac_sha512_obj then
        crypto.hash_update(hmac_sha512_obj, "1234567890")
        crypto.hash_update(hmac_sha512_obj, "1234567890")
        crypto.hash_update(hmac_sha512_obj, "1234567890")
        crypto.hash_update(hmac_sha512_obj, "1234567890")
        local hmac_sha512_result = crypto.hash_finish(hmac_sha512_obj)
        log.info("hmac_sha512_stream", hmac_sha512_result)
        log.info("hmac_sha512", crypto.hmac_sha512("1234567890123456789012345678901234567890", "1234567890"))
    end
else
    log.info("crypto", "当前固件不支持crypto.hash_init")
end

6.3.9 checksum校验和

if crypto.checksum then
    log.info("checksum", "OK", string.char(crypto.checksum("OK")):toHex())
    log.info("checksum", "357E", string.char(crypto.checksum("357E", 1)):toHex())
else
    log.info("checksum", "当前固件不支持crypto.checksum")
end   

七、运行结果展示

出现类似于下面的日志,就表示运行成功:

[2025-10-16 15:00:32.204][000000000.203] I/user.main luatos_crypto_app 001.000.000
[2025-10-16 15:00:32.794][000000001.212] I/user.md5 900150983CD24FB0D6963F7D28E17F72
[2025-10-16 15:00:32.794][000000001.213] I/user.hmac_md5 416478FC0ACE1C4AB37F85F4F86A16B1
[2025-10-16 15:00:32.794][000000001.213] I/user.sha1 A9993E364706816ABA3E25717850C26C9CD0D89D
[2025-10-16 15:00:32.805][000000001.214] I/user.hmac_sha1 DAE54822C0DAF6C115C97B0AD62C7BCBE9D5E6FC
[2025-10-16 15:00:32.810][000000001.214] I/user.sha256 BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD
[2025-10-16 15:00:32.814][000000001.215] I/user.hmac_sha256 86055184805B4A466A7BE398FF4A7159F9055EA7EEF339FC94DCEC6F165898BA
[2025-10-16 15:00:32.814][000000001.216] I/user.sha512 DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F
[2025-10-16 15:00:32.826][000000001.217] I/user.hmac_sha512 0F92B9AC88949E0BF7C9F1E6F9901BAB8EDFDC9E561DFDE428BC4339961A0569AD01B44343AA56E439949655D15C4D28492D459E75015489920243F3C9986F2A
[2025-10-16 15:00:32.834][000000001.217] D/crypto zero padding
[2025-10-16 15:00:32.842][000000001.218] I/user.AES aes-128-ecb 013EEA6EBACCBD7AD990FAEF75FB99C4 32
[2025-10-16 15:00:32.844][000000001.218] I/user.AES aes-128-ecb 023001
[2025-10-16 15:00:32.844][000000001.219] I/user.AES aes-128-ecb A37DE67837A1A3006E47A7BC25AA0ECC030B4E058E1972FE5B257FD8C3436142 64
[2025-10-16 15:00:32.858][000000001.219] I/user.AES aes-128-cbc 26D98EA512AE92BC487536B83F2BE99B467649A9700338F4B4FF75AA2654DD2C 64
[2025-10-16 15:00:32.864][000000001.220] I/user.AES aes-128-ecb 12345678901234 > 123456
[2025-10-16 15:00:32.864][000000001.220] I/user.AES aes-128-cbc 12345678901234 > 123456
[2025-10-16 15:00:32.874][000000001.220] I/user.mem 2376584 49564 58880
[2025-10-16 15:00:32.884][000000001.221] I/user.des 486CB8B81CACCDB7 16
[2025-10-16 15:00:32.889][000000001.221] I/user.des abcdefg
[2025-10-16 15:00:32.894][000000001.222] I/user.3des 14619F067B425995D0CD975B85491D98 32
[2025-10-16 15:00:32.894][000000001.223] I/user.3des abcdefg!!--ZZSS
[2025-10-16 15:00:32.894][000000001.223] I/user.crc16 54188
[2025-10-16 15:00:32.905][000000001.224] I/user.crc16 54188
[2025-10-16 15:00:32.905][000000001.224] I/user.crc16 54188
[2025-10-16 15:00:32.914][000000001.224] I/user.crc32 21438764
[2025-10-16 15:00:32.914][000000001.225] I/user.crc32 21438764
[2025-10-16 15:00:32.924][000000001.225] I/user.crc8 197
[2025-10-16 15:00:32.924][000000001.225] I/user.crc8 243
[2025-10-16 15:00:32.937][000000001.226] I/user.crc7 50 32
[2025-10-16 15:00:32.937][000000001.226] I/user.随机数测试
[2025-10-16 15:00:32.944][000000001.334] I/user.crypto 真随机数 -939521674 5
[2025-10-16 15:00:33.016][000000001.434] I/user.crypto 真随机数 -1872085296 5
[2025-10-16 15:00:33.111][000000001.534] I/user.crypto 真随机数 517455164 5
[2025-10-16 15:00:33.223][000000001.634] I/user.crypto 真随机数 657132096 5
[2025-10-16 15:00:33.311][000000001.734] I/user.crypto 真随机数 -1080191914 5
[2025-10-16 15:00:33.421][000000001.834] I/user.crypto 真随机数 -833578535 5
[2025-10-16 15:00:33.532][000000001.942] I/user.crypto 真随机数 420499958 5
[2025-10-16 15:00:33.626][000000002.042] I/user.crypto 真随机数 1233025030 5
[2025-10-16 15:00:33.720][000000002.142] I/user.crypto 真随机数 2138275442 5
[2025-10-16 15:00:33.830][000000002.242] I/user.crypto 真随机数 182791818 5
[2025-10-16 15:00:33.830][000000002.242] I/user.totp的密钥
[2025-10-16 15:00:33.830][000000002.243] I/user.totp 522113 19 29 37
[2025-10-16 15:00:33.830][000000002.244] I/user.totp 964300 19 30 7
[2025-10-16 15:00:33.830][000000002.245] I/user.totp 987714 19 30 37
[2025-10-16 15:00:33.830][000000002.246] I/user.totp 037499 19 31 7
[2025-10-16 15:00:33.830][000000002.246] I/user.totp 699697 19 31 37
[2025-10-16 15:00:33.830][000000002.247] I/user.totp 548191 19 32 7
[2025-10-16 15:00:33.845][000000002.248] I/user.totp 747517 19 32 37
[2025-10-16 15:00:33.845][000000002.249] I/user.totp 243319 19 33 7
[2025-10-16 15:00:33.861][000000002.249] I/user.totp 147474 19 33 37
[2025-10-16 15:00:33.877][000000002.250] I/user.totp 039992 19 34 7
[2025-10-16 15:00:33.877][000000002.251] I/user.totp 628512 19 34 37
[2025-10-16 15:00:33.877][000000002.252] I/user.totp 529018 19 35 7
[2025-10-16 15:00:33.892][000000002.253] I/user.totp 994006 19 35 37
[2025-10-16 15:00:33.892][000000002.253] I/user.totp 851359 19 36 7
[2025-10-16 15:00:33.907][000000002.254] I/user.totp 943237 19 36 37
[2025-10-16 15:00:33.908][000000002.255] I/user.totp 410702 19 37 7
[2025-10-16 15:00:33.908][000000002.256] I/user.totp 082993 19 37 37
[2025-10-16 15:00:33.908][000000002.256] I/user.totp 193281 19 38 7
[2025-10-16 15:00:33.908][000000002.257] I/user.totp 781573 19 38 37
[2025-10-16 15:00:33.924][000000002.258] I/user.totp 243288 19 39 7
[2025-10-16 15:00:33.924][000000002.258] I/user.base64 encode MTIz
[2025-10-16 15:00:33.924][000000002.259] I/user.base64 decode MTIz 123
[2025-10-16 15:00:33.924][000000002.260] I/user.cipher list ["AES-128-ECB","AES-192-ECB","AES-256-ECB","AES-128-CBC","AES-192-CBC","AES-256-CBC","AES-128-CTR","AES-192-CTR","AES-256-CTR","AES-128-GCM","AES-192-GCM","AES-256-GCM","AES-128-CCM","AES-192-CCM","AES-256-CCM","DES-ECB","DES-EDE-ECB","DES-EDE3-ECB","DES-CBC","DES-EDE-CBC","DES-EDE3-CBC"]
[2025-10-16 15:00:33.939][000000002.266] I/user.cipher suites 
[2025-10-16 15:00:33.939][000000002.266] ["TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384","TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384","TLS-ECDHE-ECDSA-WITH-AES-256-CCM","TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384","TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384","TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA","TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA","TLS-ECDHE-ECDSA-WITH-AES-256-CCM-8","TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256","TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256","TLS-ECDHE-ECDSA-WITH-AES-128-CCM","TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256","TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256","TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA","TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA","TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8","TLS-RSA-WITH-AES-256-GCM-SHA384","TLS-RSA-WITH-AES-256-CCM","TLS-RSA-WITH-AES-256-CBC-SHA256","TLS-RSA-WITH-AES-256-CBC-SHA","TLS-RSA-WITH-AES-256-CCM-8","TLS-RSA-WITH-AES-128-GCM-SHA256","TLS-RSA-WITH-AES-128-CCM","TLS-RSA-WITH-AES-128-CBC-SHA256","TLS-RSA-WITH-AES-128-CBC-SHA","TLS-RSA-WITH-AES-128-CCM-8","TLS-RSA-PSK-WITH-AES-256-GCM-SHA384","TLS-RSA-PSK-WITH-AES-256-CBC-SHA384","TLS-RSA-PSK-WITH-AES-256-CBC-SHA","TLS-RSA-PSK-WITH-AES-128-GCM-SHA256","TLS-RSA-PSK-WITH-AES-128-CBC-SHA256","TLS-RSA-PSK-WITH-AES-128-CBC-SHA","TLS-PSK-WITH-AES-256-GCM-SHA384","TLS-PSK-WITH-AES-256-CCM","TLS-PSK-WITH-AES-256-CBC-SHA384","TLS-PSK-WITH-AES-256-CBC-SHA","TLS-PSK-WITH-AES-256-CCM-8","TLS-PSK-WITH-AES-128-GCM-SHA256","TLS-PSK-WITH-AES-128-CCM","TLS-PSK-WITH-AES-128-CBC-SHA256","TLS-PSK-WITH-AES-128-CBC-SHA","TLS-PSK-WITH-AES-128-CCM-8"]
[2025-10-16 15:00:33.955][000000002.266] I/user.文件hash值测试
[2025-10-16 15:00:33.955][000000002.269] I/user.md5 D364D04CCD734D2757B25F3216CC431B
[2025-10-16 15:00:33.955][000000002.273] I/user.sha1 04DA64874D415B1FB9CDD2E89927397D8F48C441
[2025-10-16 15:00:33.955][000000002.284] I/user.sha256 0C601722B4BD2BC1A76BC3701F4EB646F5119C31702852978C326CD8D7C9212C
[2025-10-16 15:00:33.955][000000002.287] I/user.hmac_md5 B5F5A687DB904DB67D3311899932DD61
[2025-10-16 15:00:33.955][000000002.290] I/user.hmac_sha1 2A0B55C290D54ADF2F185EAE460254D267C7CE1F
[2025-10-16 15:00:33.971][000000002.301] I/user.hmac_sha256 6E443C84D4D7A4721A9A195EB9038EDCFA8A8F60A3F1E8A0090B57B3BAB4942E
[2025-10-16 15:00:33.971][000000002.301] I/user.md5
[2025-10-16 15:00:33.971][000000002.302] I/user.sha1
[2025-10-16 15:00:33.971][000000002.302] I/user.sha256
[2025-10-16 15:00:33.971][000000002.303] I/user.hmac_md5
[2025-10-16 15:00:33.971][000000002.303] I/user.hmac_sha1
[2025-10-16 15:00:33.971][000000002.304] I/user.hmac_sha256
[2025-10-16 15:00:33.971][000000002.304] I/user.流式hash测试
[2025-10-16 15:00:33.986][000000002.304] I/user.md5_stream F5BF3E984432AE6F9F98840951E5CEF3
[2025-10-16 15:00:33.986][000000002.305] I/user.md5 F5BF3E984432AE6F9F98840951E5CEF3
[2025-10-16 15:00:33.986][000000002.306] I/user.hmac_md5_stream 45527D9407615C3A44F475BB7172752A
[2025-10-16 15:00:33.986][000000002.306] I/user.hmac_md5 45527D9407615C3A44F475BB7172752A
[2025-10-16 15:00:33.986][000000002.307] I/user.sha1_stream C61A2C245CB07A04482CE5B662AE67DBDBE010DB
[2025-10-16 15:00:33.986][000000002.307] I/user.sha1 C61A2C245CB07A04482CE5B662AE67DBDBE010DB
[2025-10-16 15:00:33.986][000000002.308] I/user.hmac_sha1_stream 88471065B8C5F64057418A0A58353A46E7841DE7
[2025-10-16 15:00:33.986][000000002.308] I/user.hmac_sha1 88471065B8C5F64057418A0A58353A46E7841DE7
[2025-10-16 15:00:34.002][000000002.309] I/user.sha256_stream A4EBDD541454B84CC670C9F1F5508BAF67FFD3FE59B883267808781F992A0B1D
[2025-10-16 15:00:34.002][000000002.309] I/user.sha256 A4EBDD541454B84CC670C9F1F5508BAF67FFD3FE59B883267808781F992A0B1D
[2025-10-16 15:00:34.002][000000002.310] I/user.hmac_sha256_stream EAF715932F064E462893B7FE04442E2C25ECF2F7C560820A648D0D94BEAEB581
[2025-10-16 15:00:34.007][000000002.311] I/user.hmac_sha256 EAF715932F064E462893B7FE04442E2C25ECF2F7C560820A648D0D94BEAEB581
[2025-10-16 15:00:34.007][000000002.311] I/user.sha512_stream 3A8529D8F0C7B1AD2FA54C944952829B718D5BEB4FF9BA8F4A849E02FE9A272DAF59AE3BD06DDE6F01DF863D87C8BA4AB016AC576B59A19078C26D8DBE63F79E
[2025-10-16 15:00:34.007][000000002.312] I/user.sha512 3A8529D8F0C7B1AD2FA54C944952829B718D5BEB4FF9BA8F4A849E02FE9A272DAF59AE3BD06DDE6F01DF863D87C8BA4AB016AC576B59A19078C26D8DBE63F79E
[2025-10-16 15:00:34.007][000000002.313] I/user.hmac_sha512_stream 18F74340A0048090521796F52A66A45B77AF5981512951B938BFCB026F2D6ED7945B0682731E4E7E3CA72021E5E8AB9810769E48C83F440DC73D6C942215E29E
[2025-10-16 15:00:34.018][000000002.314] I/user.hmac_sha512 18F74340A0048090521796F52A66A45B77AF5981512951B938BFCB026F2D6ED7945B0682731E4E7E3CA72021E5E8AB9810769E48C83F440DC73D6C942215E29E
[2025-10-16 15:00:34.018][000000002.315] I/user.checksum OK 04 2
[2025-10-16 15:00:34.018][000000002.315] I/user.checksum 357E E4 2
[2025-10-16 15:00:34.018][000000002.315] I/user.crypto ALL Done

八、总结

通过本章内容的学习,你可以学习到有关加解密算法的函数,例如:crypto.md5(str)、crypto.hmac_md5(str, key)、crypto.hmac_sha1(str, key) 等等函数。