0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

4G模组加解密艺术:通用函数的深度解读

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2024-11-12 09:58 次阅读

今天是对加解密通用函数的深度解读,我将详细讲解,建议收藏,不可错过。

1、加解密概述

加解密算法是保证数据安全的基础技术,无论是在数据传输、存储,还是用户身份验证中,都起着至关重要的作用.随着互联网的发展和信息安全威胁的增加,了解并掌握常用的加解密算法已经成为开发者和安全从业者的必修课.

常见的15种加密解密算法分别是:
散列哈希[MD5、SHA1、CRC32],对称[DES,3DES(TDEA、TripleDES),AES,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape。

三种分类:

1.1 对称加密

对称加密是指加密和解密使用同一个密钥的加密方法.由于加密和解密过程中的密钥相同,因此需要在通信双方之间安全地共享密钥.对称加密的速度较快,适合用于大量数据的加密.

1.2 非对称加密

非对称加密算法采用一对密钥:公钥和私钥.公钥用于加密,私钥用于解密.由于加密和解密使用不同的密钥,非对称加密算法解决了密钥分发的问题,是当前加密系统中安全性最高的加密技术之一.

1.3 Hash算法

这是一种不可逆的算法,它常用于验证数据的完整性。

2、请输入标题

本文章通过Air780的核心板烧录LuatOS示例代码,来演示有关加解密的各种API的功能。

最新源码下载
https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/crypto

API的具体用法,读者可以参考本文中的"五、API说明"。

3、硬件准备

3.1 Air780E核心板

使用Air780E核心板,如下图所示:

wKgZoWcxeIeATy3-AAUCrxlwOvU905.png

此核心板的详细使用说明参考:
https://docs.openluat.com/air780e/product/

Air780E产品手册中的《开发板Core_Air780E使用说明VX.X.X.pdf》,写这篇文章时最新版本的使用说明为:《开发板Core_Air780E使用说明V1.0.5.pdf》;核心板使用过程中遇到任何问题,可以直接参考这份使用说明pdf文档。

3.2 SIM

中国大陆环境下,可以上网的sim卡,一般来说,使用移动,电信,联通的物联网卡或者手机卡都行。

3.3 PC电脑

WINDOWS系统。

3.4 数据通信线

TYPE-C口的USB数据线。

4、软件环境

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/

wKgaomcxeMWAcoTWAAIU_EWLQ8w527.png

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

wKgZoWcxeNOAEe2EAAGKI7UMgG0801.png

4.2.2 烧录的脚本代码

首先要下载Air780的LuatOS示例代码到一个合适的项目目录,示例代码网站:
https://gitee.com/openLuat/LuatOS-Air780E

下载流程参考下图:

wKgaoWcxeOeAIW5CAAbgSEon86w544.png

下载的文件解压,找到

LuatOS-Air780E-masterdemocryptomain.lua,如图:

wKgaoWcxePSABLaVAAEsC19RbXk264.png

5、API说明

5.1 crypto.md5(str)

计算md5值

参数

传入值类型 解释
string
需要计算的字符串

返回值

返回值类型 解释
string
计算得出的md5值的hex字符串

例子

wKgZomcxeQuAaaYfAAEHeBClGhY568.png

5.2 crypto.hmac_md5(str,key)

计算hmac_md5值

参数

传入值类型 解释
string
需要计算的字符串
string
密钥

返回值

返回值类型 解释
string
计算得出的hmac_md5值的hex字符串

例子

wKgZomcxeRaAK96CAAFKh07YCjE264.png

5.3 crypto.sha1(str)

计算sha1值

参数

传入值类型 解释
string
需要计算的字符串

返回值

返回值类型 解释
string
计算得出的sha1值的hex字符串

例子

wKgZomcxeSGAbE4xAAEBF57NQfc350.png

5.4 crypto.hmac_sha1(str,key)

计算hmac_sha1值

参数

传入值类型 解释
string
需要计算的字符串
string
密钥

返回值

返回值类型 解释
string
计算得出的hmac_sha1值的hex字符串

例子

wKgaoWcxeSyAFfwrAAFLyBTIlyg671.png

5.5 crypto.sha256(str)

计算sha256值

参数

传入值类型 解释
string
需要计算的字符串

返回值

返回值类型 解释
string
计算得出的sha256值的hex字符串

例子

wKgaoWcxeUGAT7K1AAE1pOlveS4689.png

5.6 crypto.hmac_sha256(str,key)

计算hmac_sha256值

参数

传入值类型 解释
string
需要计算的字符串
string
密钥

返回值

返回值类型 解释
string
计算得出的hmac_sha256值的hex字符串

例子

wKgZoWcxeUyAUkctAAGObGOi5fE442.png

5.7 crypto.sha512(str)

计算sha512值

参数

传入值类型 解释
string
需要计算的字符串

返回值

返回值类型 解释
string
计算得出的sha512值的hex字符串

例子

wKgZoWcxeVeACnjxAAEER3C9UOs985.png

5.8 crypto.hmac_sha512(str,key)

计算hmac_sha512值

参数

传入值类型 解释
string
需要计算的字符串
string
密钥

返回值

返回值类型 解释
string
计算得出的hmac_sha512值的hex字符串

例子

wKgaoWcxeWGAET44AAGMLtXDl00735.png

5.9 crypto.base64_encode(data)

将数据进行base64编码

参数

传入值类型 解释
string
待编码的数据

返回值

返回值类型 解释
string
编码后的数据

例子

wKgaoWcxeW2AfDbOAAKJ_WuTxm0992.png

5.10 crypto.base64_decode(data)

将数据进行base64解码

参数

传入值类型 解释
string
待解码的数据

返回值

返回值类型 解释
string
解码后的数据

例子

wKgaoWcxeXeAdH07AAKdeod560k396.png

5.11 crypto.cipher_list()

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

参数

返回值

返回值类型 解释
table
本固件支持的cipher列表,字符串数组

例子

wKgZoWcxeYGAZpX9AAI4GTRZrFE935.png

5.12 crypto.cipher_suites()

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

参数

返回值

返回值类型 解释
table
本固件支持的ciphersuites列表,字符串数组

例子

wKgaoWcxeYqAE0LRAAHCRLqruqk012.png

5.13 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
加密后的字符串

例子

wKgZoWcxeZ2AeeJjAANzpU1TCaA392.png

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

例子

wKgaoWcxeaiAEXiaAARXrN0_GJw542.png

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值

例子

wKgZoWcxebSAfGmQAACbFX0UQo0127.png

5.16 crypto.crc16_modbus(data,start)

直接计算modbus的crc16值

参数

传入值类型 解释
string
数据
int
初始化值,默认0xFFFF

返回值

返回值类型 解释
int
对应的CRC16值

例子

wKgZoWcxeb-AOM4qAAH2dr7H8-o733.png

5.17 crypto.crc32(data)

计算crc32值

参数

传入值类型 解释
string
数据

返回值

返回值类型 解释
int
对应的CRC32值

例子

wKgaoWcxedKAbFJ6AACvlY9S8qU492.png

5.18 crypto.crc8(data,poly,start,revert)

计算crc8值

参数

传入值类型 解释
string
数据
int
crc多项式,可选,如果不写,将忽略除了数据外所有参数
int
crc初始值,可选,默认0
boolean
是否需要逆序处理,默认否

返回值

返回值类型 解释
int
对应的CRC8值

例子

wKgaoWcxeeGAbyhYAAFg7kQ-ILg244.png

5.19 crypto.crc7(data,poly,start)

计算crc7值

参数

传入值类型 解释
string
数据
int
crc多项式,可选,默认0xE5
int
crc初始值,可选,默认0x00

返回值

返回值类型 解释
int
对应的CRC7值

例子

wKgaoWcxeeuAXpkQAAHBHiTt2ZA256.png

5.20 crypto.checksum(data,mode)

计算checksum校验和

参数

传入值类型 解释
string
待计算的数据,必选
int
模式,累加模式,0-异或,1-累加,默认为0

返回值

返回值类型 解释
int
checksum值,校验和

例子

wKgaomcxefaANHvjAAKipVgHmA0319.png

5.21 crypto.trng(len)

生成真随机数

参数

传入值类型 解释
int
数据长度

返回值

返回值类型 解释
string
指定随机数字符串

例子

wKgZomcxegCASyycAAFKzNVxwGM656.png

5.22 crypto.totp(secret,time)

计算TOTP动态密码的结果

参数

传入值类型 解释
string
网站提供的密钥(就是BASE32编码后的结果)
int
可选,时间戳,默认当前时间

返回值

返回值类型 解释
int
计算得出的六位数结果计算失败返回nil

例子

wKgZomcxegqAKXLHAAGBEm2BZ0s966.png

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

例子

wKgaoWcxehiAakHbAAUnbaLiUYY833.png

5.24 crypto.md(tp,data,hmac)

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

参数

传入值类型 解释
string
hash类型,大小字母,例如“MD5”“SHA1”“SHA256”
string
待处理的数据
string
hmac值,可选

返回值

返回值类型 解释
string
HEX过的hash值,若失败会无返回值

例子

wKgZomcxeiWANcPHAAR3luG1dAI958.png

5.25 crypto.hash_init(tp)

创建流式hash用的stream

参数

传入值类型 解释
string
hash类型,大写字母,例如“MD5”“SHA1”“SHA256”
string
hmac值,可选

返回值

返回值类型 解释
userdata
成功返回一个数据结构,否则返回nil

例子

wKgZoWcxejGAWbRFAAU0zm-U04Q751.png

5.26 crypto.hash_update(stream,data)

流式hash更新数据

参数

传入值类型 解释
userdata
crypto.hash_init()创建的stream,必选
string
待计算的数据,必选
return

返回值

例子

wKgaoWcxejyAQPG4AACeiQ-Dew8451.png

5.27 crypto.hash_finish(stream)

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

参数

传入值类型 解释
userdata
crypto.hash_init()创建的stream,必选

返回值

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

例子

wKgaoWcxekaABMb8AADRlOtmi3I188.png

6、功能验证

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键然后点按重启键即可.

wKgaoWcxemOAaRBFABKogEFl5Vw523.png

6.1.3 识别电脑的正确端口

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

wKgZomcxem-AAjIRAAIkofRALt8842.png

6.1.4 用Luatools工具烧录

新建项目

首先,确保你的Luatools的版本,大于等于3.0.6版本的.

在Luatools的左上角上有版本显示的,如图所示:

wKgaomcxeniAUWvkAAFrFiLoPU0941.png

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

wKgaomcxeoKAOSe-AAEf8P5c8Yg893.png

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

wKgaomcxeo2AQzcHAASGFFD0IlM417.png

开始烧录

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

wKgZomcxepmAWyw5AAS3vnWqNzc890.png

点击下载后,我们需要进入boot模式才能正常下载.

如果没进入boot模式会出现下图情况:

wKgZomcxeqyAB3B1AACvif4pTIA638.png

进入boot模式下载,如图:

wKgZomcxeruAFrUwAAQOn5O82Jg463.png

6.2 例程

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

wKgaomcxetKAfhTVAAc0qo1zHpo675.pngwKgZomcxeueACCyEAA3QmGXIcks918.pngwKgZomcxevyAIbf_AAkupvoqaFU360.pngwKgZomcxexCAC_nVAAeha9vSs80004.pngwKgaomcxeyOAA-HLAAmmTgrWs-Q153.pngwKgZomcxezWAPRUgAA0JLU35Sdc711.pngwKgZomcxe0iAZ2fKAA0EGOls6_U339.pngwKgaomcxe1qAfrxVAAuCeu4zIy4182.pngwKgZoWcxe2qATePsAAWQkKXKGAE875.png

6.3 对应log

wKgZoWcxe3yAKoWgABBQ0k3VUIk425.pngwKgaoWcxe5CAKrZGABCehCDardg648.pngwKgZoWcxe6iAI5ZlABZjMnnG8bw881.pngwKgZoWcxe7uALeeiAAxRtZjPjPU997.pngwKgZoWcxe82AQ7YiAAwMIp8vKnM884.pngwKgZomcxe-OAW2aoAAuQV_mY3zY403.pngwKgaomcxe_mAOdNhABBeTr5ex9w649.pngwKgZomcxfBaAaut7ABQSZQ2ZPEc121.png

7、总结

通过本章内容的学习,你可以学习到有关加解密算法的函数,例如:crypto.md5(str)、crypto.hmac_md5(str,key)、crypto.hmac_sha1(str,key)等等函数。

更多内容,敬请关注!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 4G
    4G
    +关注

    关注

    15

    文章

    5506

    浏览量

    118785
  • 模组
    +关注

    关注

    6

    文章

    1434

    浏览量

    30284
  • 加解密
    +关注

    关注

    0

    文章

    18

    浏览量

    6513
  • LuatOS
    +关注

    关注

    0

    文章

    60

    浏览量

    1925
收藏 人收藏

    评论

    相关推荐

    4G模组PWM接口:技术实操要点

    今天我们讲解的是4G模组PWM接口的技术实操要点,以我常用的模组Air724UG为例分享出来。
    的头像 发表于 11-20 23:29 68次阅读
    <b class='flag-5'>4G</b><b class='flag-5'>模组</b>PWM接口:技术实操要点

    SPI与4G模组的集成:技术要领篇

    今天咋们要讲的是SPI与4G模组的技术要领,以低功耗模组Air724UG为例,展示给大家学习。
    的头像 发表于 11-20 23:25 56次阅读
    SPI与<b class='flag-5'>4G</b><b class='flag-5'>模组</b>的集成:技术要领篇

    4G模组SD卡接口编程:深度学习

    今天我们需要深度学习的是4G模组SD卡接口编程,以我常用的模组Air724UG为例,分享给大家。
    的头像 发表于 11-20 23:14 44次阅读
    <b class='flag-5'>4G</b><b class='flag-5'>模组</b>SD卡接口编程:<b class='flag-5'>深度</b>学习

    深度解析 4G模组GPIO编程技巧篇

    本文将解析4G模组GPIO编程技巧,从概述、软硬件环境准备、示例等详细道来:
    的头像 发表于 11-20 23:08 36次阅读
    <b class='flag-5'>深度</b>解析  <b class='flag-5'>4G</b><b class='flag-5'>模组</b>GPIO编程技巧篇

    UART通信入门:4G模组软件的实践指南

    本文将对4G模组Air724UG软件的UART做出相关示例,希望想了解此模组的朋友们收藏好仔细看。
    的头像 发表于 11-17 00:07 227次阅读
    UART通信入门:<b class='flag-5'>4G</b><b class='flag-5'>模组</b>软件的实践指南

    示例篇 关于4G模组的模块信息!

    今天我会把4G模组的模块信息做出详细介绍,做出示例,展示给大家,如果觉得有用的话请点赞收藏。
    的头像 发表于 11-12 12:07 173次阅读
    示例篇  关于<b class='flag-5'>4G</b><b class='flag-5'>模组</b>的模块信息!

    示例篇:4G模组AT指令之MQTT应用!

    针对4G模组AT指令的MQTT应用,我收集资料,做出示例,整理成文分享给大家,喜欢的可以收藏。
    的头像 发表于 11-12 11:56 188次阅读
    示例篇:<b class='flag-5'>4G</b><b class='flag-5'>模组</b>AT指令之MQTT应用!

    4G模组之UDP应用的最佳实践!

    今天说的是4G模组之UDP应用,展示最佳实践,送你参考。
    的头像 发表于 11-08 09:24 177次阅读
    <b class='flag-5'>4G</b><b class='flag-5'>模组</b>之UDP应用的最佳实践!

    4G 模组 HTTP 网络协议应用 白嫖版!

    今天我们来白嫖的是Air780E模组LuatOS开发4G通信中HTTP网络协议的应用,实现模组和服务器之间数据的传输,详细介绍硬件环境、软件环境、功能验证等…
    的头像 发表于 10-30 14:22 678次阅读
    <b class='flag-5'>4G</b> <b class='flag-5'>模组</b> HTTP 网络协议应用 白嫖版!

    ML307A 4G模组硬件设计手册

    基于ML307A  4G模组的硬件设计指导手册
    发表于 10-24 16:50 1次下载

    合宙低功耗4G模组Air780EP——硬件设计02

    合宙低功耗4G模组Air780EP——硬件设计
    的头像 发表于 09-03 15:07 580次阅读
    合宙低功耗<b class='flag-5'>4G</b><b class='flag-5'>模组</b>Air780EP——硬件设计02

    合宙低功耗4G模组Air780EQ——硬件设计手册01

    合宙低功耗4G模组Air780EQ的硬件设计介绍
    的头像 发表于 08-29 18:15 2063次阅读
    合宙低功耗<b class='flag-5'>4G</b><b class='flag-5'>模组</b>Air780EQ——硬件设计手册01

    ESP32S2 WROVER在使用AT指令获取4G模组时,dte会报超时怎么解决?

    模组:ESP32 S2 WROVER 4G模组:合宙Air724UG 在使用AT指令获取4G模组时,dte会报超时。 代码和log如下图所示
    发表于 06-27 06:54

    基于FPGA的可编程AES加解密IP

    可编程AES加解密IP内建密钥扩展功能,使用初始密钥产生扩展密钥,用于加解密过程。可编程AES加解密IP处理128-bit分组数据,并且支持可编程的密钥长度:128-bit,192-bit和256-bit。
    发表于 01-09 10:49 433次阅读
    基于FPGA的可编程AES<b class='flag-5'>加解密</b>IP

    eCryptfs整体架构和核心加解密机制介绍

    的注册函数。之后eCryptfs根据mountsession中保存的key signature参数从keyring中找到对应密钥(FEKEK),再调用crypto模块API完成文件加解密。 eCryptfs核心加解密
    的头像 发表于 11-29 11:43 820次阅读
    eCryptfs整体架构和核心<b class='flag-5'>加解密</b>机制介绍