当前位置: 首页 > news >正文

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日添加

相关文章:

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, k…...

自动化测试的定位及一些思考

大家对自动化的理解,首先是想到Web UI自动化,这就为什么我一说自动化,公司一般就会有很多人反对,因为自动化的成本实在太高了,其实自动化是分为三个层面的(UI层自动化、接口自动化、单元测试)&a…...

展会动态 | 迪捷软件邀您参加2023世界智能网联汽车大会

*9月18日之前注册的观众免收门票费* 由北京市人民政府、工业和信息化部、公安部、交通运输部和中国科学技术协会联合主办的2023世界智能网联汽车大会将于9月21日-24日在北京中国国际展览中心(顺义馆)举行。 论坛背景 本届展会以“聚智成势 协同向新——…...

jenkins自动化部署springboot、gitee项目

服务器需要安装jdk11、maven、gitee 1. jenkins安装 # yum源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo # 公钥 sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key # 安装 yum install jenkins如果yum源报…...

Python环境配置及基础用法Pycharm库安装与背景设置及避免Venv文件夹

目录 一、Python环境部署及简单使用 1、Python下载安装 2、环境变量配置 3、检查是否安装成功 4、Python的两种模式(编辑模式&交互模式) 二、Pycharm库安装与背景设置 1、Python库安装 2、Pycharm自定义背景 三、如何避免Venv文件夹 一、P…...

PHP常见的SQL防注入方法

利用Mysqli和PDO 产生原因主要就是一些数据没有经过严格的验证,然后直接拼接 SQL 去查询。导致产生漏洞,比如: $id $_GET[id]; $sql "SELECT name FROM users WHERE id $id";因为没有对 $_GET[‘id’] 做数据类型验证&#xf…...

分布式和中间件等

raft协议 paxos算法ddos 如何避免?怎么预防?怎么发现?利用了TCP什么特点?怎么改进TCP可以预防?服务端处理不了的请求怎么办?连接数最大值需要设置吗?怎么设置? Thrift RPC过程是什么样子的?异构系统怎么完成通信?跟http相比什么优缺点?了解grpc吗?kafka topic part…...

通过http发送post请求的三种Content-Type分析

通过okhttp向服务端发起post网络请求,可以通过Content-Type设置发送请求数据的格式。 常用到的三种: 1)application/x-www-form-urlencoded; charsetutf-8 2)application/json; charsetutf-8 3)multipart/form-dat…...

Vue中的自定义指令详解

文章目录 自定义指令自定义指令-指令的值(给自定义指令传参数) 自定义指令 自定义指令:自己定义的指令,可以封装一些dom 操作,扩展额外功能(自动聚焦,自动加载,懒加载等复杂的指令封…...

[管理与领导-100]:管理者到底是什么?调度器?路由器?交换机?监控器?

目录 前言: 二层交换机 三层路由器 监视器(Monitor) 调度器 前言: 人在群体中,有点像设备在网络中,管理者到底承担什么的功能? 二层交换机 交换机是计算机网络中,用于连接多台…...

保研CS/软件工程/通信问题汇总

机器学习 1.TP、TN、FP、FN、F1 2.机器学习和深度学习的区别和联系 模型复杂性:深度学习是机器学习的一个子领域,其主要区别在于使用深层的神经网络模型。深度学习模型通常包含多个隐层,可以学习更加复杂的特征表示,因此在某些任…...

word、excel、ppt转为PDF

相关引用对象在代码里了 相关依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency> <dependency><groupId>org.apache.poi</group…...

2023华为杯D题——基于Kaya模型的碳排放达峰实证研究

一、前言 化石能源是推动现代经济增长的重要生产要素&#xff0c;经济生产活动与碳排放活动密切相关。充分认识经济增长与碳排放之间的关系对转变生产方式&#xff0c;确定碳达峰、碳中和路径极为必要。本研究在对经济增长与碳排放关系现有研究梳理的基础上&#xff0c;系统地分…...

有哪些好用的上网行为管理软件?(上网行为管理软件功能好的软件推荐)

随着互联网的快速发展&#xff0c;企业的信息化管理和员工的上网行为已经成为企业信息化建设的重要组成部分。上网行为管理软件作为一种新型的管理工具&#xff0c;可以帮助企业实现对员工上网行为的管控和优化&#xff0c;进而提高企业的工作效率和网络安全。本文将对多款市场…...

npm install报错 code:128

报的错误: npm ERR! code 128 npm ERR! An unknown git error occurred npm ERR! command git --no-replace-objects ls-remote ssh://gitgithub.com/nhn/raphael.git npm ERR! gitgithub.com: Permission denied (publickey). npm ERR! fatal: Could not read from remote re…...

爬虫 — Scrapy 框架(一)

目录 一、介绍1、同步与异步2、阻塞与非阻塞 二、工作流程三、项目结构1、安装2、项目文件夹2.1、方式一2.2、方式二 3、创建项目4、项目文件组成4.1、piders/__ init __.py4.2、spiders/demo.py4.3、__ init __.py4.4、items.py4.5、middlewares.py4.6、pipelines.py4.7、sett…...

Python编程语言学习笔记

目录 1 书写格式1.1 程序框架格式1.1 注释1.2 保留字 2 数据2.1 整数类型2.2 浮点类型2.3 复数类型2.4 数值运算符2.5 数值运函数2.6 数值类型转换函数2.7 math 库2.8 字符串2.8.1 字符串的表示2.8.2 字符串的区间访问2.8.3 字符串操作符2.8.4 字符串操作函数 2.9 字符串类型的…...

【运维面试100问】(三)说说你在故障排除方面的经历

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…...

Postman 全局配置接口路径变量等

Postman 全局配置接口路径变量等 一、简介 这里主要是介绍通过配置postman接口测试工具&#xff0c;简化每次新增模块等接口时修改url的繁琐过程&#xff0c;方便以后查阅&#xff01;&#xff01;&#xff01; 二、全局变量设置 1、新增测试环境 新增测试环境 2、接口集合设…...

一文掌握CodiMD安装与使用

简介&#xff1a;CodiMD 是一个基于 Markdown 语言的实时协作文档编辑器&#xff0c;它允许多个用户在同一个文档上进行实时编辑。CodiMD 的前身是 HackMD&#xff0c;但为了满足更开放的开源社区需求&#xff0c;CodiMD 作为其社区版本独立出来。 优势&#xff1a; 1. 开源且…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...