8 提醒: 本demo需要用到公钥和私钥, demo目录中的公钥私钥文件是演示用的, 实际使用请自行生成
10 生成公钥私钥, 可使用openssl命令, 或者找个网页生成. 2048 是RSA位数, 最高支持4096,但不推荐,因为很慢.
12 openssl genrsa -out privkey.pem 2048
13 openssl rsa -in privkey.pem -pubout -out public.pem
16 -- 下载脚本和资源到设备时, 务必加上本目录下的两个 pem 文件, 否则本demo无法运行.
19 -- LuaTools需要PROJECT和VERSION这两个信息
23 log.info("main", PROJECT
, VERSION
)
26 _G
.sys
= require("sys")
28 -- 因为这是通用demo, air101/air103跑满速才不至于太慢-_-
29 if rtos
.bsp() == "AIR101" or rtos
.bsp() == "AIR103" or rtos
.bsp() == "AIR601" then
35 sys
.taskInit(function()
36 -- 为了日志能正常显示出来, 这里特意延时2秒, 实际使用中不需要
39 -- 检查是否带rsa库, 没有就提醒一下吧
41 log.warn("main", "this demo need rsa lib!!!")
46 local res
= rsa
.encrypt((io
.readFile("/luadb/public.pem")), "abc")
48 log.info("rsa", "encrypt", res
and #res
or 0, res
and res
:toHex() or "")
50 -- 下面是解密, 通常不会在设备端进行, 这里主要是演示用法, 会很慢
53 local dst
= rsa
.decrypt((io
.readFile("/luadb/privkey.pem")), res
, "")
54 log.info("rsa", "decrypt", dst
and #dst
or 0, dst
and dst
:toHex() or "")
58 local hash
= crypto
.sha1("1234567890"):fromHex()
60 local sig
= rsa
.sign((io
.readFile("/luadb/privkey.pem")), rsa
.MD_SHA1
, hash
, "")
61 log.info("rsa", "sign", sig
and #sig
or 0, sig
and sig
:toHex() or "")
64 local ret
= rsa
.verify((io
.readFile("/luadb/public.pem")), rsa
.MD_SHA1
, hash
, sig
)
65 log.info("rsa", "verify", ret
)
69 -- 用户代码已结束---------------------------------------------
72 -- sys.run()之后后面不要加任何语句!!!!!