Lua LuatOS Crypto 全接口速查:哈希、对称加密、CRC 与随机安全一次性掌握

·

关键词:LuatOS、crypto API、哈希函数、对称加密、CRC 校验、TOTP、Base64、TRNG

LuatOS 为物联网开发者提供了一套开箱即用的安全算法库 crypto。本文以实际场景为线索,梳理全部 30 余个函数,配以简洁示例与常见问题 FAQ,确保你在 10 分钟内即可上手加密、解密与数据完整性校验的所有主流需求。


1. 哈希函数:MD5 / SHA1 / SHA256 / SHA512

单向摘要场景

代码示例

-- MD5 简单摘要
local digest = crypto.md5("hello")                 -- 输出 32 位十六进制字符串
print("MD5", digest)

-- SHA256 + HMAC(带密钥的哈希)
local hmac256 = crypto.hmac_sha256("hello", "key123")
print("HMAC-SHA256", hmac256)

文件级哈希

无需加载整个文件即可计算,节省内存:

-- 固件 SHA256 验证
local fw_hash = crypto.md_file("SHA256", "/luadb/firmware.bin")
if fw_hash ~= expected_hash then
  log.error("固件完整性校验失败")
end

2. 对称加密:AES ECB / CBC 全模式

参数说明
type"AES-128-CBC" 可用 crypto.cipher_list() 查询
padding推荐 "PKCS7",其他选项见官方文档
str明文或密文字节串
key长度须匹配算法(128/192/256 bit)
iv非 ECB 模式必填

端到端加密实例

local function aes_encrypt(plainText)
  local key = "1234567890ABCDEF"
  local iv  = "0000111122223333"
  return crypto.cipher_encrypt("AES-128-CBC", "PKCS7", plainText, key, iv)
end

local cipher = aes_encrypt("sensorData=23.5")
print("密文", cipher)

👉 即刻体验端到端加密 · 不让数据裸奔!


3. 校验码 & CRC:物联网通信的护身符

场景速配

一行式调用

local frame = "\x02\x04\x00\x01\x00\x02"
local crc = crypto.crc16_modbus(frame)
-- 自动附带高低字节顺序

4. Base64:非文本数据的 HTTP 或 MQTT 传输

local json = '{"temp":27.3,"hum":60}'
local b64  = crypto.base64_encode(json)
mqtt_client:publish("device/data", b64)

解码仅需 crypto.base64_decode(b64),兼容老版本 string.toBase64


5. HOTP / TOTP:两步验证秒集成

实现两类动态口令:

-- Google Authenticator 格式
local otp = crypto.totp("JBSWY3DPEHPK3PXP")
print("动态口令:", otp)

6. 真随机数 TRNG:密钥、令牌一秒生成

-- 32 字节(256-bit)随机密钥
local key = crypto.trng(32)
print("一次性密钥", crypto.base64_encode(key))

7. 流式哈希:分片计算大文件

避免一次性加载百兆文件到内存。

local stream = crypto.hash_init("SHA256")

while true do
  local chunk = file.read(4096)
  if not chunk then break end
  crypto.hash_update(stream, chunk)
end

local file_sha = crypto.hash_finish(stream)
print("文件 SHA256", file_sha)

8. 快速查询:crypto.cipher_list()crypto.cipher_suites()

日常排查:

local supported = crypto.cipher_list()
for _, name in ipairs(supported) do
  print("支持算法", name)
end

👉 一键查看你固件到底支持哪些加密算法!


常见问题 FAQ

Q1:AES key 长度写错直接死机?
A:确保长度与算法匹配。AES-128=16 Byte,AES-192=24 Byte,AES-256=32 Byte。可以用 string.len(key) 先自检。

Q2:CRC16 结果为何与在线工具不一致?
A:CRC 初始值、多项式、反转位三项需一致。crypto.crc16("MODBUS", data) 已配好官方参数。

Q3:Base64 太长担心内存?
A:LuatOS 使用分段内存,1 MB 之内无需担心。过万字节时对 LED 屏打卡展示也无压力。

Q4:TOTP 时间窗口漂移怎么办?
A:传入 crypto.totp(secret, os.time() ± 30) 允许 ±1 窗口。固件内置 NTP 校时后基本不会漂移。

Q5:如何验证固件升级后 crypto 模块仍存在?
A:测试行 assert(crypto.md5("abc") == "900150983cd24fb0d6963f7d28e17f72"),打印成功即可继续升级。

Q6:流式哈希可以中途加 salt 吗?
A:不能。需在 hash_init 里一次性带入 HMAC。若需动态加盐,请重新创建新流对象。


小结

完整掌握 30+ 个 crypto 函数,你已为物联网设备加上数字安全“三重锁”。
现在就动手把上述片段拼成最小安全样板,部署到 Air780E 或 Air700E 系列模块,现场验证加密链路吧!