LuatOS核心库API——【xxtea】XXTEA加解密算法

LuatOS 是面向物联网设备的轻量级嵌入式 Lua 脚本运行框架及实时系统,基于 Lua 5.3 深度优化,可应用于 4G‑Cat.1、MCU 等各类物联网终端。该系统支持 Lua 脚本开发与协程多任务架构,内置 70 多个核心库、20 多个扩展库,并提供 1000 多个应用 demo 示例,能够满足物联网基础开发的需求。

一、概述

XXTEA(eXtended eXtended Tiny Encryption Algorithm)是一种轻量级的对称分组加密算法,由David Wheeler和Roger Needham在1998年提出,旨在改进其前身TEA和XTEA算法的安全性。

核心特点是实现简单、代码精炼、执行效率高,非常适合资源受限的环境,如嵌入式系统、物联网设备或对脚本、配置文件进行基础保护。

该算法使用128位密钥,采用Feistel结构,通过多轮(通常为6 + 52/n轮,n为数据块数)的加法、移位和异或操作(其核心混淆运算通常定义为MX宏)对数据进行混淆和扩散,能够处理任意长度的数据块,而不仅仅是固定大小的数据。

由于其设计权衡了安全性与效率,XXTEA适用于一般性数据的加密需求,但在面对极高安全要求的场景时,其强度不如AES等更现代的算法。

二、核心示例

1、核心示例是指:使用本库文件提供的核心API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

3、更加完整和详细的demo,请参考 LuatOS仓库 中各个产品目录下的demo/xxtea

lua 复制代码
-- 本库是对 https://github.com/xxtea/xxtea-c 的封装, 再次感谢xxtea的作者


-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "xxtea"
VERSION = "1.0.0"


function xxtea_fnc()
    if not xxtea then
        while true do
            sys.wait(1000)
            -- 每隔1秒打印一条信息
            log.info("testCrypto.xxteaTest","xxtea库不存在,请选择带xxtea的固件")
        end
    end
    while true do
        sys.wait(1000)
        local text = "Hello World!"
        local key = "07946"
        local encrypt_data = xxtea.encrypt(text, key)
        log.info("testCrypto.xxteaTest","xxtea_encrypt:", encrypt_data:toHex())
        local decrypt_data = xxtea.decrypt(encrypt_data, key)
        log.info("testCrypto.xxteaTest","decrypt_data:", decrypt_data)
    end
end

sys.taskInit(xxtea_fnc)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

三、常量详解

核心库常量,顾名思义是由合宙LuatOS内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

xxtea核心库没有常量。

四、函数详解

xxtea.encrypt(data, key)

功能

进行xxtea加密

注意事项

暂无

参数

data

lua 复制代码
含义说明:待加密的数据;
数据类型:string;
取值范围:长度为4字节的倍数,长度不足4字节的倍数会自动补0
是否必选:必须传入此参数;
注意事项:作为必需参数,若不提供会导致错误;
参数示例:local text = "Hello World!"
        local key = "07946"
        local encrypt_data = xxtea.encrypt(text, key)

key

lua 复制代码
含义说明:加密用的密钥;
数据类型:string;
取值范围:长度为16字节,密钥不足16字节,会在其右侧补0以达到所需长度
是否必选:必须传入此参数;
注意事项:作为必需参数,若不提供会导致错误;
参数示例:local text = "Hello World!"
        local key = "07946"
        local encrypt_data = xxtea.encrypt(text, key)

返回值

local encrypt_data = xxtea.encrypt(text, key)

encrypt_data

lua 复制代码
含义说明:使用xxtea加密后的数据;
数据类型:string;
取值范围:成功时返回加密后的数据, 失败返回nil
注意事项:无;

例子

lua 复制代码
local text = "Hello World!"
local key = "07946"
local encrypt_data = xxtea.encrypt(text, key)

xxtea.decrypt(data, key)

功能

进行xxtea解密

注意事项

暂无

参数

data

lua 复制代码
含义说明:待解密的数据;
数据类型:string;
取值范围:无特别限制
是否必选:必须传入此参数;
注意事项:作为必需参数,若不提供会导致错误;
参数示例:local text = "Hello World!"
        local key = "07946"
        local encrypt_data = xxtea.encrypt(text, key)
        local decrypt_data = xxtea.decrypt(encrypt_data, key)

key

lua 复制代码
含义说明:解密用的密钥;
数据类型:string;
取值范围:长度为16字节,密钥不足16字节,会在其右侧补0以达到所需长度
是否必选:必须传入此参数;
注意事项:作为必需参数,若不提供会导致错误;
参数示例:local text = "Hello World!"
        local key = "07946"
        local encrypt_data = xxtea.encrypt(text, key)
        local decrypt_data = xxtea.decrypt(encrypt_data, key)

返回值

local decrypt_data = xxtea.decrypt(encrypt_data, key)

decrypt_data

lua 复制代码
含义说明:使用xxtea解密后的数据;
数据类型:string;
取值范围:成功时返回解密后的数据, 失败返回nil
注意事项:无;

例子

lua 复制代码
local text = "Hello World!"
local key = "07946"
local encrypt_data = xxtea.encrypt(text, key)
local decrypt_data = xxtea.decrypt(encrypt_data, key)

五、函数详解

支持 LuatOS 开发的所有主推产品都支持 xxtea 核心库。

今天先分享到这里啦~

相关推荐
上海合宙LuatOS2 天前
LuatOS扩展库API——【extp】触摸控制
嵌入式硬件·物联网·lua·luatos
上海合宙LuatOS2 天前
LuatOS扩展库API——【exvib】震动检测
开发语言·物联网·lua·luatos
TechExplorer3653 天前
Postman 9.12 安装、汉化、禁用更新
测试工具·lua·postman
liulilittle3 天前
Lua 浮点数比较
开发语言·junit·lua
rannn_1114 天前
【Redis|高级篇2】多级缓存|JVM进程缓存、Lua语法、多级缓存实现(OpenResty)、缓存同步(Canal)
java·redis·分布式·后端·缓存·lua·openresty
VT LI6 天前
Lua 源码执行流程全解析:词法分析、语法分析、字节码生成、虚拟机执行与垃圾回收
java·开发语言·lua
历程里程碑6 天前
二叉树---二叉树的中序遍历
java·大数据·开发语言·elasticsearch·链表·搜索引擎·lua
上海合宙LuatOS7 天前
LuatOS扩展库API——【exremotefile】远程文件管理系统
物联网·lua·luatos
上海合宙LuatOS7 天前
LuatOS扩展库API——【exremotecam】网络摄像头控制
开发语言·网络·物联网·lua·luatos
专吃海绵宝宝菠萝屋的派大星8 天前
使用postman测试自己编写的mcp服务
测试工具·lua·postman