init: Air780EPM 官方 LuatOS 项目代码基线

- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
wangfq
2026-08-31 08:53:49 +08:00
commit 173dd6874f
813 changed files with 125484 additions and 0 deletions
@@ -0,0 +1,282 @@
--[[
@module crypto_app
@summary crypto_app应用功能模块
@version 1.0
@date 2025.10.15
@author 沈园园
@usage
本文件为crypto_app应用功能模块,核心业务逻辑为:
1、演示有关加解密的各种 API 的功能包含MD5SHA,哈希(MD5SHA)AES/DEC/3DESCRCchecksum校验和;
本文件没有对外接口,直接在main.lua中require "crypto_app"就可以加载运行;
]]
--加密运算主函数
local function crypto_task_func()
-- 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"))
-- 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
-- 计算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
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
--将数据进行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
-- 打印所有支持的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
-- 计算文件的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
-- 流式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
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
log.info("crypto", "ALL Done")
sys.wait(100000)
end
--创建一个task,并且运行task的主函数crypto_task_func
sys.taskInit(crypto_task_func)
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,63 @@
--[[
@module main
@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
@version 1.0
@date 2025.10.15
@author 沈园园
@usage
本demo演示的核心功能为:
演示有关加解密的各种 API 的功能包含MD5SHA,哈希(MD5SHA)AES/DEC/3DESCRCchecksum校验和
更多说明参考本目录下的readme.md文件
]]
--[[
必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
PROJECT:项目名,ascii string类型
可以随便定义,只要不使用,就行
VERSION:项目版本号,ascii string类型
如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为999
如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
]]
PROJECT = "luatos_crypto_app"
VERSION = "001.999.000"
-- 在日志中打印项目名和项目版本号
log.info("main", PROJECT, VERSION)
-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
-- 启动errDump日志存储并且上传功能,600秒上传一次
-- if errDump then
-- errDump.config(true, 600)
-- end
-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
-- 可以使用合宙的iot.openluat.com平台进行远程升级
-- 也可以使用客户自己搭建的平台进行远程升级
-- 远程升级的详细用法,可以参考fota的demo进行使用
-- 启动一个循环定时器
-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
-- 方便分析内存使用是否有异常
-- sys.timerLoopStart(function()
-- log.info("mem.lua", rtos.meminfo())
-- log.info("mem.sys", rtos.meminfo("sys"))
-- end, 3000)
-- 加载crypto_app应用功能模块
require "crypto_app"
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行
@@ -0,0 +1,148 @@
## 功能模块介绍
1、main.lua:主程序入口;
2、crypto_app.lua:演示有关加解密的各种 API 的功能包含MD5SHA,哈希(MD5SHA)AES/DEC/3DESCRCchecksum校验和;
3、logo.jpg:待加密文件
## 演示功能概述
1、创建一个task
2、演示有关加解密的各种 API 的功能;
## 演示硬件环境
![](https://docs.openluat.com/air780epm/luatos/common/hwenv/image/Air780EPM2.png)
1、Air780EPM核心板一块
2、TYPE-C USB数据线一根
3、Air780EPM核心板和数据线的硬件接线方式为
- Air780EPM核心板通过TYPE-C USB口连接TYPE-C USB 数据线,数据线的另外一端连接电脑的USB口;
- 核心板正面的 ON/OFF 拨动开关 拨到ON一端;
## 演示软件环境
1、[Luatools下载调试工具](https://docs.openluat.com/air780epm/luatos/common/download/)
2、[Air780EPM 最新版本的内核固件](https://docs.openluat.com/air780epm/luatos/firmware/version/)
## 演示核心步骤
1、搭建好硬件环境
2、Luatools烧录内核固件和demo脚本代码
3、烧录成功后,自动开机运行
4、出现类似于下面的日志,就表示运行成功:
``` lua
[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
```