合宙Air105

2023-10-28

基础资料

基于Air105开发板:Air105 - LuatOS 文档

上手:开发上手 - LuatOS 文档

探讨重点

对官方CRYPTO(加密与解密) 功能的复现,进行相关内容的学习及探讨。

单片机的CRYPTO(加密与解密)功能是指单片机上集成了加密与解密算法,可以通过编程实现数据的加密与解密。不同的单片机厂商会提供不同的CRYPTO模块,例如STM32就有X-CUBE-CRYPTOLIB和STM32的对称加解密加速器Crypto等。这些模块可以支持多种对称和非对称加密算法,如DES/TDES、AES等。

实现功能

功能1:常用加解密操作及hash函数;

        常用的加解密操作有对称加密和非对称加密。对称加密是指加密和解密使用相同的密钥,而非对称加密则是使用不同的密钥进行加密和解密。常见的对称加密算法有DES、3DES、AES等,常见的非对称加密算法有RSA、ECC等。

哈希函数是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。常见的哈希函数有MD5、SHA-1、SHA-224、SHA-384、SHA-512等。

功能2:RSA加密解密(RSA1024、RSA2048);

        RSA1024和RSA2048的区别在于密钥长度不同。RSA算法密钥长度的选择是安全性和程序性能平衡的结果,密钥长度越长,安全性越好,加密解密所需时间越长。实际中常使用1024bit秘钥和2048bit秘钥,分别称为RSA1024和RSA2048。秘钥包含公钥和私钥,即公钥私钥长度一样,都是1024bit或2048bit。

硬件准备

Air103开发板1块。

软件版本

AIR103:LuatOS@AIR105 base 22.11 bsp V0011 32bit

软件使用

接口文档可参考:CRYPTO功能

功能1:常用加解密操作及hash函数

--- base64 算法测试
local function base64Test(str)
    local encodeStr = crypto.base64_encode(str, #str)
	log.info("base64 encode", encodeStr:toHex())
	log.info("base64 decode", crypto.base64_decode(encodeStr, #encodeStr))
end

--- md5 算法测试
local function md5Test(str)
    log.info("md5 encode", crypto.md5(str, #str))
end

--- sha1 算法测试
local function sha1Test(str)
    log.info("sha1 encode", crypto.sha1(str, #str))
end

--- sha256 算法测试
local function sha256Test(str)
    log.info("sha256 encode", crypto.sha256(str, #str))
end

--- crc算法测试
local function crcTest(str)
    log.info("crc modebus encode",  string.format("%04X", crypto.crc16("MODBUS", str)))
end

功能2:常用加解密操作及hash函数

 -- 读取公钥并马上加密数据
    local res = rsa.encrypt((io.readFile("/luadb/rsa_public_key.pem")), "abc")
    -- 打印结果
    log.info("rsa", "encrypt", res and #res or 0, res and res:toHex() or "")

    if res then
        -- 读取私钥, 然后解码数据
        local dst = rsa.decrypt((io.readFile("/luadb/rsa_private_key.pem")), res, "")
        log.info("rsa", "decrypt", dst and #dst or 0, dst and dst:toHex() or "")
    end

    -- 演示签名和验签
    local hash = crypto.sha1("1234567890"):fromHex()
    -- 签名通常很慢, 通常是服务器做
    local sig = rsa.sign((io.readFile("/luadb/rsa_private_key.pem")), rsa.MD_SHA1, hash, "")
    log.info("rsa", "sign", sig and #sig or 0, sig and sig:toHex() or "")
    if sig then
        -- 验签是很快的
        local ret = rsa.verify((io.readFile("/luadb/rsa_public_key.pem")), rsa.MD_SHA1, hash, sig)
        log.info("rsa", "verify", ret)
    end
end)

log

[2022-11-24 22:55:01.257] Jump_AppRun 76:jump to 0x01010400 !
[2022-11-24 22:55:01.257] main 188:APP Build release Nov 24 2022 14:43:27!
[2022-11-24 22:55:01.257] I/main LuatOS@AIR105 base 22.11 bsp V0011 32bit
[2022-11-24 22:55:01.257] I/main ROM Build: Nov 24 2022 14:43:34
[2022-11-24 22:55:01.271] D/main loadlibs luavm 204792 15504 15504
[2022-11-24 22:55:01.271] D/main loadlibs sys   406792 51112 51616
[2022-11-24 22:55:01.271] I/user.main	rsademo	1.0.1
[2022-11-24 22:55:03.346] I/user.rsa	encrypt	128	1F632C35E2BA14797342E2444DAC168E1526EDA9215B650D3C51537BD70D95B56BF5529ABC61DEE08790B2C5E4D6DBC1585565ADD57BA4AFA85DD75A43DE6196C80337C2393E03E1D30F126B73D990A0B65BEAFF19741D3F905A5D2BD29E306AA0FB9E4FA6239AB59127CA7EF5FFC086CE9A432C1F1765DFE46B246ACFBEBAB6
[2022-11-24 22:55:03.520] I/user.rsa	decrypt	3	616263
[2022-11-24 22:55:03.693] I/user.rsa	sign	128	167DE068E144FF39D53032F6C0E76D331E3C781B58A52FF038A91A1E64848079F1B97F64AE9EA83FEF1BD22B08281D5049E6E9F2A80B4BDE678F36868EEB0F2CFC4C6911190B322A4779DD038323C90676A0D8005DAADEE861ADAC2ADBBCE77F6ACAB705372D4247A82B8BC772C681147B0A85B47BF21972CC053706BBE1E1BE
[2022-11-24 22:55:03.693] I/user.rsa	verify	true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合宙Air105 的相关文章

  • 用于数据存储的 Lua 与 XML

    我们中的许多人都被灌输了使用 XML 来存储数据的观念 它的优点和缺点众所周知 我当然不想在这里讨论它们 然而 在我用 C 编写的项目中 我也使用 Lua 我非常惊讶 Lua 能够如此出色地存储和处理数据 然而 Lua 的这一方面却鲜为人知
  • 设置私有 luarocks 存储库

    对于我的设置 我需要一个 luarocks rock 的私有存储库 我可以将它们安装在我的开发环境中 而无需连接到互联网 为 luarocks 设置远程存储库的步骤是什么 我可以使用 sftp 服务器吗 有人有过这样的经历吗 在深入研究这个
  • 错误 main.lua:23:尝试索引 upvalue 'Menu' (布尔值)

    我正在尝试用 lua 和 love2d 制作一个主菜单 这是我第一次这样做 遗憾的是没有关于此事的教程 所以我自己尝试了一下 我一直遇到这个错误 我不知道如何解决它 请帮助 完整错误消息 错误main lua 23 尝试索引upvalue
  • 覆盖 require 后调用 lua_getfield() 时崩溃

    这个问题与 Henri Menke 在这个问题中的回答相关 如何在 C 中获取预加载模块名称 https stackoverflow com questions 51510308 how to get preloaded module na
  • 为什么这个 Lua 优化 hack 会提高性能?

    我正在寻找一个描述提高 Lua 性能的各种技术的文档 http www lua org gems sample pdf脚本代码 我很震惊竟然需要这样的技巧 虽然我引用的是 Lua 但我在 Javascript 中也见过类似的 hack 为什
  • 在 lua 中使用相等运算符比较数字有多安全?

    在我的引擎中 我有一个用于脚本编写的 Lua VM 在脚本中 我写了这样的内容 stage stage 1 if stage 5 then end and objnum tonumber 5 if stage objnum 根据 Lua 来
  • LuaJit FFI 从 C 函数返回字符串到 Lua?

    假设我有这个 C 函数 declspec dllexport const char GetStr static char buff 32 Fill the buffer with some string here return buff 这
  • 如何更新lua中的时间以反映执行过程中系统时区的变化?

    Problem 我想修改awful widget textclockAwesome wm 中的小部件可以立即反映系统时区的更改 这个小部件和所有的 Awesome wm 配置都是用 lua 编写的 目前 如果系统时区发生更改 小部件将继续根
  • Corona/Box2D 检测与非移动静态物体的碰撞

    出于发帖原因 这是我正在尝试做的事情的简单版本 在屏幕上我有一个简单的圆形对象 它是静态的并且不会移动 然后用户可以拖放一条直线 如果该线穿过该圆圈 我希望触发碰撞事件 看来除非其中一个物体正在移动 否则永远不会检测到碰撞 绘制线条时能否检
  • Lua 中的内联条件(a == b ? "yes" : "no")?

    无论如何 Lua 中可以使用内联条件吗 Such as print blah a true blah nahblah Sure print blah a and blah or nahblah
  • 检查lua中是否存在目录?

    如何检查 lua 中是否存在目录 如果可能的话最好不使用 LuaFileSystem 模块 尝试做类似以下 python 行的事情 os path isdir path 这是一种在 Unix 和 Windows 上都适用的方式 无需任何外部
  • Lua-迭代嵌套表

    我已经学习 Lua 几个星期了 这一次又一次成为我的症结所在 我尝试阅读有关该主题的帖子和书籍 我使用 Lua 查询软件监控系统 Nimsoft 我的数据以表格形式返回给我 我不会发布整个输出 但这里有一个我认为可以描述结构的片段 表参考是
  • Kong - 验证上游 ssl(ssl_proxy 打开)

    我已经成功为 API 安装了 kong 网关 该 API 通过上游负载平衡到多个目标 应用程序服务器 现在 我有一个我的应用程序服务器的自签名证书 kong 和目标之间的 ssl 握手应该失败 我推断 kong 不验证上游证书 经过一些研究
  • 尝试将 nil 与数字堆栈回溯进行比较?

    我正在通过以下链接玩 Lua https www lua org pil 4 2 html https www lua org pil 4 2 html并对某一点感到困惑 Lua 5 2 4 Copyright C 1994 2015 Lu
  • 使用 FastCGI 运行 Lua 脚本

    我目前正在尝试找出使用 FastCGI 与 lighttpd 或 Nginx 一起运行 Lua 脚本的方法 我唯一能挖到的是WSAPI http keplerproject github com wsapi 开普勒计划的一部分 但我想知道是
  • VB6 - Lua 集成

    我想知道是否有人有任何集成 Lua 和 VB6 的技巧 我正在运行一个小型在线角色扮演游戏 添加一些脚本会很棒 嗯 这是可行的 我曾经为 Lua 5 0 2 做过 但找不到文件 在您拥有的选项中 您可以 将 Lua 封装在公开 Lua AP
  • Lua 将字符串转换为数字 - 取决于语言环境

    刚刚注意到字符串 and tonumber 在 Lua 中是依赖于语言环境的 知道如何在不使用的情况下将字符串转换为数字tonumber 谢谢 例如将字符串 58 5 转换为 58 5 另外 当我尝试将带点的数字传递给函数时 该函数会转换
  • 如何使用 srlua 制作可执行的 Lua 脚本?

    我的主要目标是使我的 lua 文件成为可执行文件或使其成为咬代码 最好是两者皆有 我正在尝试 srlua 但在自述文件中它告诉我要做的事情 对于Windows 您需要首先创建srlua exe和glue exe 然后为每个 你想把Lua程序
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • Lua 访问表的键和值

    我想在关卡编辑器中读取 Lua 文件 这样我就可以以可视化格式显示其数据供用户编辑 如果我有一个像这样的 Lua 表 properties Speed 10 TurnSpeed 5 Speed显然是关键并且10价值 我知道如果我知道像这样的

随机推荐

  • Java中的二维数组排序——多条件排序

    目录 重写Array sort 方法 使用lambda表达式重写Array sort 方法 重写Array sort 方法 输入的排序数组的形式为int 2 例如 int test 7 0 4 4 7 1 5 0 6 1 5 2 排序的逻辑
  • 打扮一下咱们的开发工具--更换IDEA主题

    当我们安装一个新的IDEA工具时 第一次进入时会提示我们选择一个themes 但是只有两个风格 如下图 我们可以选择自己喜欢的主题风格吗 当然是可以设置的啦 亲测按以下方式设置IntelliJ IDEA 和PyCharm 都可以 一 下载我
  • Android UI组件学习——AutoCompleteTextView

    Android UI组件学习 自动完成文本框 AutoCompleteTextView 的功能和用法 AutoCompleteTextView还派生了一个子类 MultiAutoCompleteTextView 该子类功能与AutoComp
  • 文件上传之upload-labs 1~5 详细介绍

    一 Pass 01 前端js验证 1 1 原理描述 在文件上传时 用户选择文件时 或者提交时 有些网站会对前端文件名进行验证 一般检测后缀名 是否为上传的格式 如果上传的格式不对 则弹出提示文字 此时数据包并没有提交到服务器 只是在客户端通
  • Mongoose中的查找

    使用Mongoose来查找文档很容易 有以下3种方法可供选择 find findById findOne 1 find 第一个参数表示查询条件 第二个参数用于控制返回的字段 第三个参数用于配置查询参数 第四个参数是回调函数 回调函数的形式为
  • 抖音快手最新版抓包模块免费送

    安装前 安装后 视频讲解 https www bilibili com video BV1Ga411Q7be p 10 vd source 43c2c404de6d798650d44c856ee1e992 下载地址也在视频评论区
  • YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

    前言 本篇文章主要是对YOLOv5项目的训练部分train py 通常这个文件主要是用来读取用户自己的数据集 加载模型并训练 文章代码逐行手打注释 每个模块都有对应讲解 一文帮你梳理整个代码逻辑 友情提示 全文近5万字 可以先点再慢慢看哦
  • MySql-JDBC故障转移

    MySQL Connector J 支持故障转移 故障转移在潜在的风险要发生的时候使用 通常情况下 数据库连接发生错误 需要客户端的异常处理 重新创建Statement ResultSet 重启进程 而使用Mysql Replication
  • 多模态大模型应用大观

    浩渺宇宙中 生命与文明经历了亿万年的沉淀与演变 这是人类集体智慧逐步觉醒的过程 人们正在渐渐掌握加速前行的翅膀 从古老的蒸汽机到现代的电力 再跨越到计算机与互联网的时代 每一次人类文明的跃进 都离不开开拓者的勇敢探索 在不断地开拓进取中那些
  • STM32 Keil报错 error: #35: #error directive: “include FreeRTOS.h must appear in source files before...

    在跑代码的时候 本来没错的突然报错 error 35 error directive include FreeRTOS h must appear in source files before include task h 原因是 引用了
  • GRPC编译安装、各种语言插件及C++/golang测试

    GRPC编译安装 各种语言插件及测试 复制过程 可能乱了 原笔记地址 有道云笔记 官网 Quick start C gRPC 编译 安装 官方测试 手写测试 跨语言测试 这里用golang 一 编译和安装 1 1源码编译安装 git clo
  • pads PCB封装问题记录

    写在这里 以后可以翻一翻 问题 今天又遇到了PCB封装的问题 这个座子的封装 左右两边有很长的线 在PCB layout中 选择其他元器件时会选中它 但是这两条线在PCB layout中不显示 很是烦人 解决方法 先找到这个线在哪里 编辑元
  • Vue中使用Google的reCAPTCHA v3人机校验-demo

    reCAPTCHA Google 提供了 reCAPTCHA v3 和 v2 和 reCAPTCHA Enterprise 帮助您保护网站免受欺诈活动 垃圾内容和滥用行为的侵扰 reCAPTCHA v3 所有的頁面都會有 reCaptcha
  • ubuntu16.04 catkin_make报错No rule to make target '/usr/lib/x86_64-linux-gnu/libGL.so'

    最近 博主遇到了极其糟心的事情 Ubuntu16 04系统的主机开机重启之后 循环显示输入密码进入的提示 天地良心 密码绝对正确 就是进不到桌面 后来在好心人的帮助下 终于可以看到Ubuntu系统的桌面了 博主的心情那是相当的激动 但是 激
  • Django概述(第一章)

    一 安装django 更改python默认镜像源 在pycharm下方Terminal中执行下面命令 pip config set global index url https pypi tuna tsinghua edu cn simpl
  • std::string::npos作用

    关于std string npos 字符串末尾位置 的使用 一般作为查找匹配项 include
  • 开源大数据利器汇总

    所有分类 gt 服务器软件 gt 分布式 云计算 大数据 开源大数据利器汇总 开源 2015 05 21 21 00 00 发布 您的评价 0 0 收藏 0收藏 类别 名称 官
  • 单独搭建mysql网站

    在服务器部署这网站 拖入已给文件 自动化导入 打开navicat 新建数据库 右键数据库 运行SQL文件 选择要导入的文件 可以查看表内数据 手工导入 mysql uroot p123 create database abc 创建数据库ab
  • 【华为OD机试】求字符串中所有整数的最小和(C++ Python Java)2023 B卷

    题目描述 输入字符串s 输出s中包含所有整数的最小和 说明 字符串s 只包含 a z A Z 合法的整数包括 1 正整数 一个或者多个0 9组成 如 0 2 3 002 102 2 负整数 负号 开头 数字部分由一个或者多个0 9组成 如
  • 合宙Air105

    基础资料 基于Air105开发板 Air105 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方CRYPTO 加密与解密 功能的复现 进行相关内容的学习及探讨 单片机的CRYPTO 加密与解密 功能是指单片机上集成了