LuatOS-SOC接口文档(air780E)--crypto - 加解密和hash函数

crypto.md5(str)

计算md5值

参数

传入值类型

解释

string

需要计算的字符串

返回值

返回值类型

解释

string

计算得出的md5值的hex字符串

例子

-- 计算字符串"abc"的md5
log.info("md5", crypto.md5("abc"))

crypto.hmac_md5(str, key)

计算hmac_md5值

参数

传入值类型

解释

string

需要计算的字符串

string

密钥

返回值

返回值类型

解释

string

计算得出的hmac_md5值的hex字符串

例子

-- 计算字符串"abc"的hmac_md5
log.info("hmac_md5", crypto.hmac_md5("abc", "1234567890"))

crypto.sha1(str)

计算sha1值

参数

传入值类型

解释

string

需要计算的字符串

返回值

返回值类型

解释

string

计算得出的sha1值的hex字符串

例子

-- 计算字符串"abc"的sha1
log.info("sha1", crypto.sha1("abc"))

crypto.hmac_sha1(str, key)

计算hmac_sha1值

参数

传入值类型

解释

string

需要计算的字符串

string

密钥

返回值

返回值类型

解释

string

计算得出的hmac_sha1值的hex字符串

例子

-- 计算字符串"abc"的hmac_sha1
log.info("hmac_sha1", crypto.hmac_sha1("abc", "1234567890"))

crypto.sha256(str)

计算sha256值

参数

传入值类型

解释

string

需要计算的字符串

返回值

返回值类型

解释

string

计算得出的sha256值的hex字符串

例子

-- 计算字符串"abc"的sha256
log.info("sha256", crypto.sha256("abc"))

crypto.hmac_sha256(str, key)

计算hmac_sha256值

参数

传入值类型

解释

string

需要计算的字符串

string

密钥

返回值

返回值类型

解释

string

计算得出的hmac_sha256值的hex字符串

例子

-- 计算字符串"abc"的hmac_sha256
log.info("hmac_sha256", crypto.hmac_sha256("abc", "1234567890"))

crypto.sha512(str)

计算sha512值

参数

传入值类型

解释

string

需要计算的字符串

返回值

返回值类型

解释

string

计算得出的sha512值的hex字符串

例子

-- 计算字符串"abc"的sha512
log.info("sha512", crypto.sha512("abc"))

crypto.hmac_sha512(str, key)

计算hmac_sha512值

参数

传入值类型

解释

string

需要计算的字符串

string

密钥

返回值

返回值类型

解释

string

计算得出的hmac_sha512值的hex字符串

例子

-- 计算字符串"abc"的hmac_sha512
log.info("hmac_sha512", crypto.hmac_sha512("abc", "1234567890"))

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

加密后的字符串

例子

-- 计算AES
local data = crypto.cipher_encrypt("AES-128-ECB", "PKCS7", "1234567890123456", "1234567890123456")
local data2 = crypto.cipher_encrypt("AES-128-CBC", "PKCS7", "1234567890123456", "1234567890123456", "1234567890666666")

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

解密后的字符串

例子

-- 用AES加密,然后用AES解密
local data = crypto.cipher_encrypt("AES-128-ECB", "PKCS7", "1234567890123456", "1234567890123456")
local data2 = crypto.cipher_decrypt("AES-128-ECB", "PKCS7", data, "1234567890123456")
-- data的hex为 757CCD0CDC5C90EADBEEECF638DD0000
-- data2的值为 1234567890123456

crypto.crc16(method, data, poly, initial, finally, inReversem outReverse)

计算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值

例子

-- 计算CRC16
local crc = crypto.crc16("")

crypto.crc16_modbus(data)

直接计算modbus的crc16值

参数

传入值类型

解释

string

数据

返回值

返回值类型

解释

int

对应的CRC16值

例子

-- 计算CRC16 modbus
local crc = crypto.crc16_modbus(data)

crypto.crc32(data)

计算crc32值

参数

传入值类型

解释

string

数据

返回值

返回值类型

解释

int

对应的CRC32值

例子

-- 计算CRC32
local crc = crypto.crc32(data)

crypto.crc8(data)

计算crc8值

参数

传入值类型

解释

string

数据

int

crc多项式,可选,如果不写,将忽略除了数据外所有参数

int

crc初始值,可选,默认0

boolean

是否需要逆序处理,默认否

返回值

返回值类型

解释

int

对应的CRC8值

例子

-- 计算CRC8
local crc = crypto.crc8(data)
local crc = crypto.crc8(data, 0x31, 0xff, false)

crypto.trng(len)

生成真随机数

参数

传入值类型

解释

int

数据长度

返回值

返回值类型

解释

string

指定随机数字符串

例子

-- 生成32位随机数ir
local r = crypto.trng(4)
local _, ir = pack.unpack(r, "I")

crypto.totp(secret,time)

计算TOTP动态密码的结果

参数

传入值类型

解释

string

网站提供的密钥(就是BASE32编码后的结果)

int

可选,时间戳,默认当前时间

返回值

返回值类型

解释

int

计算得出的六位数结果 计算失败返回nil

例子

--使用当前系统时间计算
local otp = crypto.totp("asdfassdfasdfass")

crypto.base64_encode(data)

将数据进行base64编码

参数

传入值类型

解释

string

待编码的数据

返回值

返回值类型

解释

string

编码后的数据

例子

-- 本函数与 string.toBase64 是同一个
local data = "123"
local bdata = crypto.base64_encode(data)
log.info("base64", "encode", data, bdata)
data = crypto.base64_decode(data)
log.info("base64", "decode", data, bdata)

crypto.base64_decode(data)

将数据进行base64解码

参数

传入值类型

解释

string

待解码的数据

返回值

返回值类型

解释

string

解码后的数据

例子

-- 本函数与 string.fromBase64 是同一个
local data = "123"
local bdata = crypto.base64_encode(data)
log.info("base64", "encode", data, bdata)
data = crypto.base64_decode(data)
log.info("base64", "decode", data, bdata)

crypto.cipher_list()

获取当前固件支持的cipher列表

参数

返回值

返回值类型

解释

table

本固件支持的cipher列表,字符串数组

例子

-- 本API于2022.07.27添加
local ciphers = crypto.cipher_list()
if ciphers thenlog.info("crypto", "ciphers list", json.encode(ciphers))
end

crypto.cipher_suites()

获取当前固件支持的cipher suites列表

参数

返回值

返回值类型

解释

table

本固件支持的cipher suites列表,字符串数组

例子

-- 本API于2022.11.16添加
local suites = crypto.cipher_suites()
if suites thenlog.info("crypto", "ciphers suites", json.encode(suites))
end

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值,若失败会无返回值

例子

-- 无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"))

crypto.md(tp, data, hmac)

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

参数

传入值类型

解释

string

hash类型, 大小字母, 例如 “MD5” “SHA1” “SHA256”

string

待处理的数据

string

hmac值,可选

返回值

返回值类型

解释

string

HEX过的hash值,若失败会无返回值

例子

-- 无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"))

crypto.hash_init(tp)

创建流式hash用的stream

参数

传入值类型

解释

string

hash类型, 大写字母, 例如 “MD5” “SHA1” “SHA256”

string

hmac值,可选

返回值

返回值类型

解释

userdata

成功返回一个数据结构,否则返回nil

例子

-- 无hmac的hash stream
local md5_stream = crypto.hash_init("MD5")
local sha1_stream = crypto.hash_init("SHA1")
local sha256_stream = crypto.hash_init("SHA256")-- 带hmac的hash stream
local md5_stream = crypto.hash_init("MD5", "123456")
local sha1_stream = crypto.hash_init("SHA1", "123456")
local sha256_stream = crypto.hash_init("SHA256", "123456")

crypto.hash_update(stream, data)

流式hash更新数据

参数

传入值类型

解释

userdata

crypto.hash_init()创建的stream, 必选

string

待计算的数据,必选

return

返回值

例子

crypto.hash_update(stream, "OK")

crypto.hash_finish(stream)

获取流式hash校验值并释放创建的stream

参数

传入值类型

解释

userdata

crypto.hash_init()创建的stream,必选

返回值

返回值类型

解释

string

成功返回计算得出的流式hash值的hex字符串,失败无返回

例子

local hashResult = crypto.hash_finish(stream)

crypto.checksum(data, mode)

计算checksum校验和

参数

传入值类型

解释

string

待计算的数据,必选

int

模式,累加模式, 0 - 异或, 1 - 累加, 默认为0

返回值

返回值类型

解释

int

checksum值,校验和

例子

-- 本函数在 2022.12.28 添加
-- 单纯计算checksum值
local ck = crypto.checksum("OK")
log.info("checksum", "ok", string.format("%02X", ck))
-- 第二个参数mode在2023.5.23日添加

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

balenaEtcher格式化的U盘恢复原来样子

今天用balenaEtcher烧录了U盘,刷机N1盒子openwrt, 刷完机结果发现自己的U盘电脑最后只有167M 想要恢复原来的64G以下是方法,使用win10系统 1、打开命令行cmd(winr打开运行,在其中输入cmd就可以打开); 2…

C++QT day11

绘制时钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent>//绘制事件类 #include <QDebug>//信息调试类 #include <QPainter>//画家类 #include <QTimer>//定时器类 #include <QTime> #include &…

Android---打开相机拍照

简单实现打开系统系统相机拍一张图片并显示在UI上&#xff0c;适用与个人主页头像的切换。 1. 添加权限。AndroidManifest.xml里添加使用相机的权限。 <uses-permission android:name"android.permission.CAMERA"/> 2. 布局。布局内容比较交单&#xff0c;一…

leetcode21合并两个有序链表

题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输…

智慧农业农场小程序源码 智慧农场系统源码

智慧农业农场小程序源码 智慧农场系统源码 一、 智慧农场系统的组成 智慧农场系统一般包括传感器、控制器、数据采集与处理平台、应用软件等组成部分。其中, 传感器主要用于采集土壤温度、湿度、光照强度等环境参数,以及作物生长状态、水肥情况等生产信息。控制器则根据传感器…

一个关于 i++ 和 ++i 的面试题打趴了所有人

前言 都说大城市现在不好找工作&#xff0c;可小城市却也不好招人。 我们公司招了挺久都没招到&#xff0c;主管感到有些心累。 我提了点建议&#xff0c;是不是面试问的太深了&#xff0c;在这种小城市&#xff0c;能干活就行。 他说自己问的面试题都很浅显&#xff0c;如果答…

你写过的最蠢的代码是?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Parseval’s Theorem Parseval’s Identity of Fourier Transform

https://www.tutorialspoint.com/parseval-s-theorem-and-parseval-s-identity-of-fourier-transform

使用PCL进行ICP点云配准

下面代码的功能是&#xff1a;把一个文件夹中所有的pcd文件进行ICP点云配准&#xff0c;并且把每帧结果使用PCL的cloud_viewer进行显示。因为是在ROS下使用&#xff0c;所以还有一个ROS的发布操作(可忽略)。   源码如下&#xff1a; #include <iostream> #include <…

最新AI创作系统+ChatGPT网站源码+支持GPT4.0+支持ai绘画+支持国内全AI模型

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&#x…

Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢

一、前言 Unity 引擎宣布自 2024 年 1 月 1 日起&#xff0c;将根据游戏安装量对开发者进行收费。官网通知如下 收费模式如图 这张图的大致意思就是&#xff0c; 从2024年1月1日开始&#xff0c;Unity将对所有达标的用户&#xff08;开发者&#xff09;根据游戏安装量征收“安…

ES6-扩展运算符“...“

三个连续的句点 … 称为 “展开运算符” (spread operator)&#xff0c;它可以将数组或对象展开成一个列表或一组键值对,常用于组合两个或多个阵列。 组合数组 const arr1 [1, 2, 3]; const arr2 [...arr1, 4, 5, 6]; // [1, 2, 3, 4, 5, 6] 组合对象 const obj1 {a: 1, …

ARM Linux DIY(十三)Qt5 移植

前言 板子带有屏幕&#xff0c;那当然要设计一下 GUI&#xff0c;对 Qt5 比较熟悉&#xff0c;那就移植它吧。 移植 Qt5 buildroot 使能 Qt5&#xff0c;这里我们只开启核心功能 gui module --> widgets module 编译 $ make ODIY_V3S/ qt5base编译报错&#xff1a;找不…

Windows11系统C盘用户文件夹下用户文件夹为中文,解决方案

说明&#xff1a; 1. 博主电脑为Windows11操作系统&#xff0c;亲测有效&#xff0c;修改后无任何影响&#xff0c;软件都可以正常运行&#xff01; 2. Windows10系统还不知道可不可行&#xff0c;因为Windows11的计算机管理中没有本地用户和组&#xff0c;博主在csdn上看到很…

【斗罗2】霍雨浩实力被否定,超级斗罗眼光被嘲,魂导院成功捡漏

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析斗罗大陆2绝世唐门。 最新一集《绝世唐门》已经更新&#xff0c;相信不少小伙伴和小郑一样都已经先睹为快&#xff0c;本集虽然是过渡剧情&#xff0c;但本身还是有不少有意思的剧情&#xff0c;作为过渡文戏也算是可圈可…

网工基础知识——以太网

1972年Bob Metcalfe“以太网之父”被Xerox雇佣为网络专家&#xff0c;Bob Metcalfe 来到Xerox公司的Palo Alto研究中心&#xff08;PARC&#xff09;的第一个任务是把Palo Alto的计算机连接到ARPANET&#xff08;Internet的前身&#xff09;上。1972年底Bob Metcalfe以ALOHA系统…

修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像

大家都知道Maven默认连接的仓库位置https://repo .maven.apache.org/maven2访问国外镜像下载东西时相对较慢&#xff0c;所以多数朋友想切换到国内镜像&#xff0c;国内阿里已经给大家提供了一套完整的镜像供大家使用。 Maven默认连接的仓库位置 <repositories><repos…

【1++的Linux】之进程(三)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的Linux】 文章目录 一&#xff0c;什么是进程地址空间&#xff1f;二&#xff0c;进程地址空间是怎么设计的&#xff1f;三&#xff0c;为什么要有进程地址空间&#xff1f; 一&#xff0c;什…

【最新!企知道AES加密分析】使用Python实现完整解密算法

文章目录 1. 写在前面2. 过debugger3. 抓包分析4. 断点分析5. Python实现解密算法1. 写在前面 最近华为各方面传递出来的消息无不体现出华为科技实力与技术处于遥遥领先的地位。所以出于好奇想要了解一下咱们国内这些互联网科技企业有哪些技术专利,于是就有了这篇文章! 分析目…