合宙Air105|CRYPTO|加密与解密|算法|RSA|HASH函数| BASE64|MD5|SHA1|SHA256|CRC|官方demo|学习(4):CRYPTO(加密与解密)

基础资料

基于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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值