干货分享:通用加解密函数(crypto),Air780E篇
加解密算法是保证数据安全的基础技术,无论是在数据传输、存储,还是用户身份验证中,都起着至关重要的作用.随着互联网的发展和信息安全威胁的增加,了解并掌握常用的加解密算法已经成为开发者和安全从业者的必修课.
常见的15种加密解密算法分别是:
散列哈希[MD5、SHA1、CRC32],对称[DES,3DES(TDEA、TripleDES),AES,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape。
三种分类:
1.1 对称加密
对称加密是指加密和解密使用同一个密钥的加密方法.由于加密和解密过程中的密钥相同,因此需要在通信双方之间安全地共享密钥.对称加密的速度较快,适合用于大量数据的加密.
1.2 Hash算法
这是一种不可逆的算法,它常用于验证数据的完整性。
1.3 非对称加密
非对称加密算法采用一对密钥:公钥和私钥.公钥用于加密,私钥用于解密.由于加密和解密使用不同的密钥,非对称加密算法解决了密钥分发的问题,是当前加密系统中安全性最高的加密技术之一.
本文章通过Air780的核心板烧录LuatOS示例代码,来演示有关加解密的各种API的功能。
三、硬件准备
3.1 Air780E核心板
使用Air780E核心板,如下图所示:

Air780E产品手册中的《开发板Core_Air780E使用说明VX.X.X.pdf》,写这篇文章时最新版本的使用说明为:《开发板Core_Air780E使用说明V1.0.5.pdf》;核心板使用过程中遇到任何问题,可以直接参考这份使用说明pdf文档。
3.2 SIM卡
中国大陆环境下,可以上网的sim卡,一般来说,使用移动,电信,联通的物联网卡或者手机卡都行。
3.3 数据通信线
带TYPE-C口的USB数据线。
3.4 PC电脑
WINDOWS系统。
4.1 Luatools工具
要想烧录LuatOS到4G模组中,需要用到合宙的强大的调试工具:Luatools
详细使用说明参考:
Luatools工具使用说明
https://docs.openluat.com/Luatools/
Luatools工具集具备以下几大核心功能:
一键获取最新固件:自动连接合宙服务器,轻松下载最新的合宙模组固件.
固件与脚本烧录:便捷地将固件及脚本文件烧录至目标模组中.
串口日志管理:实时查看模组通过串口输出的日志信息,并支持保存功能.
串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求.
Luatools下载之后,新建一个命名为"Luatools"的文件夹,将下载的Luatools_v3.exe拷贝或移动到新建的Luatools文件夹内,点击Luatools_v3.exe即可运行。
4.2 准备需要烧录的代码
首先要说明一点:脚本代码,要和固件的soc文件一起烧录。
4.2.1 烧录的底层固件文件
底层core下载地址:
LuatOS固件版本下载地址
https://docs.openluat.com/air780e/luatos/firmware/

Air780E的底层固件在Luatools解压后目录的:
LuatOS-SoC_V1112_EC618_FULL.soc

4.2.2 烧录的脚本代码
首先要下载Air780的LuatOS示例代码到一个合适的项目目录,示例代码网站:
https://gitee.com/openLuat/LuatOS-Air780E
下载流程参考下图:


下载的文件解压,找到
LuatOS-Air780E-master\demo\crypto\main.lua,如图:

5.1 crypto.md5(str)
计算md5值
参数
| 传入值类型 | 解释 |
|
string |
需要计算的字符串 |
返回值
| 返回值类型 | 解释 |
|
string |
计算得出的md5值的hex字符串 |
例子

5.2 crypto.hmac_md5(str,key)
计算hmac_md5值
参数
| 传入值类型 | 解释 |
|
string |
需要计算的字符串 |
|
string |
密钥 |
返回值
| 返回值类型 | 解释 |
|
string |
计算得出的hmac_md5值的hex字符串 |
例子

5.3 crypto.sha1(str)
计算sha1值
参数
| 传入值类型 | 解释 |
|
string |
需要计算的字符串 |
返回值
| 返回值类型 | 解释 |
|
string |
计算得出的sha1值的hex字符串 |
例子

5.4 crypto.hmac_sha1(str,key)
计算hmac_sha1值
参数
| 传入值类型 | 解释 |
|
string |
需要计算的字符串 |
|
string |
密钥 |
返回值
| 返回值类型 | 解释 |
|
string |
计算得出的hmac_sha1值的hex字符串 |
例子

5.5 crypto.sha256(str)
计算sha256值
参数
| 传入值类型 | 解释 |
|
string |
需要计算的字符串 |
返回值
| 返回值类型 | 解释 |
|
string |
计算得出的sha256值的hex字符串 |
例子

5.6 crypto.hmac_sha256(str,key)
计算hmac_sha256值
参数
| 传入值类型 | 解释 |
|
string |
需要计算的字符串 |
|
string |
密钥 |
返回值
| 返回值类型 | 解释 |
|
string |
计算得出的hmac_sha256值的hex字符串 |
例子

5.7 crypto.sha512(str)
计算sha512值
参数
| 传入值类型 | 解释 |
|
string |
需要计算的字符串 |
返回值
| 返回值类型 | 解释 |
|
string |
计算得出的sha512值的hex字符串 |
例子

5.8 crypto.hmac_sha512(str,key)
计算hmac_sha512值
参数
| 传入值类型 | 解释 |
|
string |
需要计算的字符串 |
|
string |
密钥 |
返回值
| 返回值类型 | 解释 |
|
string |
计算得出的hmac_sha512值的hex字符串 |
例子

5.9 crypto.base64_encode(data)
将数据进行base64编码
参数
| 传入值类型 | 解释 |
|
string |
待编码的数据 |
返回值
| 返回值类型 | 解释 |
|
string |
编码后的数据 |
例子

5.10 crypto.base64_decode(data)
将数据进行base64解码
参数
| 传入值类型 | 解释 |
|
string |
待解码的数据 |
返回值
| 返回值类型 | 解释 |
|
string |
解码后的数据 |
例子

5.11 crypto.cipher_list()
获取当前固件支持的cipher列表
参数
无
返回值
| 返回值类型 | 解释 |
|
table |
本固件支持的cipher列表,字符串数组 |
例子

5.12 crypto.cipher_suites()
获取当前固件支持的ciphersuites列表
参数
无
返回值
| 返回值类型 | 解释 |
|
table |
本固件支持的ciphersuites列表,字符串数组 |
例子

5.13 crypto.cipher_encrypt(type,padding,str,key,iv)
对称加密
参数
| 传入值类型 | 解释 |
|
string |
算法名称,例如AES-128-ECB/AES-128-CBC, |
|
string |
对齐方式, |
|
string |
需要加密的数据 |
|
string |
密钥,需要对应算法的密钥长度 |
|
string |
IV值,非ECB算法需要 |
返回值
| 返回值类型 | 解释 |
|
string |
加密后的字符串 |
例子

5.14 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 |
解密后的字符串 |
例子

5.15 crypto.crc16
(method,data,poly,initial,finally,inReversemoutReverse)
计算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值 |
例子

5.16 crypto.crc16_modbus(data,start)
直接计算modbus的crc16值
参数
| 传入值类型 | 解释 |
|
string |
数据 |
|
int |
初始化值,默认0xFFFF |
返回值
| 返回值类型 | 解释 |
|
int |
对应的CRC16值 |
例子

5.17 crypto.crc32(data)
计算crc32值
参数
| 传入值类型 | 解释 |
|
string |
数据 |
返回值
| 返回值类型 | 解释 |
|
int |
对应的CRC32值 |
例子

5.18 crypto.crc8(data,poly,start,revert)
计算crc8值
参数
| 传入值类型 | 解释 |
|
string |
数据 |
|
int |
crc多项式,可选,如果不写,将忽略除了数据外所有参数 |
|
int |
crc初始值,可选,默认0 |
|
boolean |
是否需要逆序处理,默认否 |
返回值
| 返回值类型 | 解释 |
|
int |
对应的CRC8值 |
例子

5.19 crypto.crc7(data,poly,start)
计算crc7值
参数
| 传入值类型 | 解释 |
|
string |
数据 |
|
int |
crc多项式,可选,默认0xE5 |
|
int |
crc初始值,可选,默认0x00 |
返回值
| 返回值类型 | 解释 |
|
int |
对应的CRC7值 |
例子

5.20 crypto.checksum(data,mode)
计算checksum校验和
参数
| 传入值类型 | 解释 |
|
string |
待计算的数据,必选 |
|
int |
模式,累加模式,0-异或,1-累加,默认为0 |
返回值
| 返回值类型 | 解释 |
|
int |
checksum值,校验和 |
例子

5.21 crypto.trng(len)
生成真随机数
参数
| 传入值类型 | 解释 |
|
int |
数据长度 |
返回值
| 返回值类型 | 解释 |
|
string |
指定随机数字符串 |
例子

5.22 crypto.totp(secret,time)
计算TOTP动态密码的结果
参数
| 传入值类型 | 解释 |
|
string |
网站提供的密钥(就是BASE32编码后的结果) |
|
int |
可选,时间戳,默认当前时间 |
返回值
| 返回值类型 | 解释 |
|
int |
计算得出的六位数结果计算失败返回nil |
例子

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

5.24 crypto.md(tp,data,hmac)
计算数据的hash值(md5/sha1/sha256及hmac形式)
参数
| 传入值类型 | 解释 |
|
string |
hash类型,大小字母,例如“MD5”“SHA1”“SHA256” |
|
string |
待处理的数据 |
|
string |
hmac值,可选 |
返回值
| 返回值类型 | 解释 |
|
string |
HEX过的hash值,若失败会无返回值 |
例子

5.25 crypto.hash_init(tp)
创建流式hash用的stream
参数
| 传入值类型 | 解释 |
|
string |
hash类型,大写字母,例如“MD5”“SHA1”“SHA256” |
|
string |
hmac值,可选 |
返回值
| 返回值类型 | 解释 |
|
userdata |
成功返回一个数据结构,否则返回nil |
例子

5.26 crypto.hash_update(stream,data)
流式hash更新数据
参数
| 传入值类型 | 解释 |
|
userdata |
crypto.hash_init()创建的stream,必选 |
|
string |
待计算的数据,必选 |
|
return |
无 |
返回值
无
例子

5.27 crypto.hash_finish(stream)
获取流式hash校验值并释放创建的stream
参数
| 传入值类型 | 解释 |
|
userdata |
crypto.hash_init()创建的stream,必选 |
返回值
| 返回值类型 | 解释 |
|
string |
成功返回计算得出的流式hash值的hex字符串,失败无返回 |
例子

6.1 烧录固件
6.1.1 正确连接电脑和4G模组电路板
使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线.
6.1.2 识别4G模组的boot引脚
在下载之前,要用模组的boot引脚触发下载,也就是说,要把4G模组的boot引脚拉到1.8v,或者直接把boot引脚和VDD_EXT引脚相连.我们要在按下BOOT按键时让模块开机,就可以进入下载模式了.
具体到Air780E开发板:
1、当我们模块没开机时,按着BOOT键然后长按POW开机.
2、当我们模块开机时,按着BOOT键然后点按重启键即可.

6.1.3 识别电脑的正确端口
判断是否进入BOOT模式:模块上电,此时在电脑的设备管理器中,查看串口设备,会出现一个端口表示进入了boot下载模式,如下图所示:

6.1.4 用Luatools工具烧录
新建项目
首先,确保你的Luatools的版本,大于等于3.0.6版本的.
在Luatools的左上角上有版本显示的,如图所示:

Luatools版本没问题的话,就点击Luatools右上角的“项目管理测试”按钮,如下图所示:

这时会弹出项目管理和烧录管理的对话框,可以新建一个项目,如下图:

开始烧录
选择780E板子对应的底层core和刚改的main.lua脚本文件.下载到板子中.

点击下载后,我们需要进入boot模式才能正常下载.
如果没进入boot模式会出现下图情况:

进入boot模式下载,如图:


6.2 例程
本库有专属demo,点此链接查看crypto的demo例子

6.3 对应log

七、总结
通过本章内容的学习,你可以学习到有关加解密算法的函数,例如:crypto.md5(str)、crypto.hmac_md5(str,key)、crypto.hmac_sha1(str,key)等等函数。
干货分享:通用加解密函数(crypto),Air780E篇的更多相关文章
- Oracle中的加解密函数
对Oracle内部数据的加密,可以简单得使用DBMS_CRYPTO来进行,效果还是不错的,而且使用也比较方便,所以今天专门来学习一下这个包的使用方法.在使用之前,要注意两件事情: 1.DBMS_CRY ...
- js常用加解密函数汇总
1. JS自定义加密解密函数,及用法 function compile(code) { )+code.length); ;i<code.length;i++){ c+=String.fromCh ...
- php 加解密函数
PHP 加密解密函数: /** * 系统加密方法 * @param string $data 要加密的字符串 * @param string $key 加密密钥 * @param int $expir ...
- 在SQL SERVER中实现RSA加解密函数(第二版)
/*************************************************** 作者:herowang(让你望见影子的墙) 日期:2010.1.5 注: 转载请保留此信息 更 ...
- 在SQL SERVER中实现RSA加解密函数(第一版)
/*************************************************** 作者:herowang(让你望见影子的墙) 日期:2010.1.1 注: 转载请保留此信息 ...
- oracle常用加解密函数
md5 CREATE OR REPLACE FUNCTION MD5( passwd IN VARCHAR2) RETURN VARCHAR2 IS retval varchar2(32); BEGI ...
- PHP和.NET通用的加密解密函数类,均使用3DES加解密 .
以下为php代码 <PRE class=PHP name="code"> </PRE><PRE class=PHP name="code&q ...
- 2个比较经典的PHP加密解密函数分享
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些AP ...
- 以Crypto++实现RSA加解密二进制数据
网上一大片讲怎么加解密字符串的,找了大半天也没找到讲加解密二进制数据的,于是自己研究了下,分享给大家. 加解密函数: #include <rsa.h> #include <randp ...
- 康盛(discuz )牛逼的PHP加解密算法函数
1.前言 康盛的 authcode 函数很牛叉,是一个具有有效期的加解密函数,同一个字符每次加密所产生的结果都是不一致的,并且可以自定义设置过期时间. 设计原理:authcode 是使用异或运算进行加 ...
随机推荐
- Prometheus部署以及问题解决
Prometheus作用: Prometheus监控(Prometheus Monitoring)是一种开源的系统监控和警报工具.它最初由SoundCloud开发并于2012年发布,并在2016年加入 ...
- QTreeWidget折叠子项(折叠当前项的所有子项)
QTreeWidget折叠子项(折叠当前项的所有子项) 本文仅供本人知识总结使用,所以内容会比较浅显,不喜勿喷. 文章目录 QTreeWidget折叠子项(折叠当前项的所有子项) 一.仅折叠子项 二. ...
- 冲刺 NOIP 400pts + 之神仙专题
冲刺专题之 \(DP\) \(T_A\) Helping People $$codeforces$$ 题意 给定一个长为 \(n\) 序列 \(A\) , 其中有 \(q\) 个区间 \([l , r ...
- Android Adapter分页显示异常: 首页数据在屏幕内全显示,无法上滑分页
前情提要: Android 端Adapter分页,下拉刷新,上滑分页, 原有流程:上滑时,滑动触及底部,触发Adapter的onScrolled的方法 异常情况:第一页数据完全显示,导致上滑时,未触及 ...
- 在虚拟机CentOS中安装jdk
公众号本文地址:在虚拟机CentOS中安装jdk 本文主要是记录在CentOS中安装新的JDK的过程. 在虚拟机的centos中安装Jdk主要分为三步,第一步上传jdk文件到centos中,第二步解压 ...
- springCloud allibaba 微服务引言
微服务篇: springcloud 常见组件有哪些 nacos 的服务注册表结构是怎样的 nacos 如何支撑阿里内部数十万服务注册压力 nacos 如何避免并发读写冲突问题 nacos 和eurek ...
- 小tips:ECMA-262定义的7种错误类型
七种错误类型如下: Error EvalError RangeError ReferenceError SyntaxError TypeError URIError 其中,Error是基类型(其他六种 ...
- 小tips:postMessage处理iframe跨域通信
实例 父页面发消息给子页面,子页面接收消息后回复父页面. 父页面代码: <body> 父级页面: <button id="btn">给iframe子页面传递 ...
- 学习高校课程-软件设计模式-软件设计原则(lec2)
Feature of Good Design (1) 优秀设计的特点(一) Code reuse 代码复用 – Challenge: tight coupling between components ...
- C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...