Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
固件加密
请教 tiny aes256 编码后,数据长度问题!!
发布于 2019-03-14 11:21:47 浏览:2478
订阅该版
1.软件环境 : env 1.1.0 + rt-thread 4.0+qemu-vexpress-a9+rt-thread固件打包工具 2. 添加 fastlz ![11.JPG](/uploads/201903/14/110250nwn4xyn4wa4daxxw.jpg) 3.添加 ![11.JPG](/uploads/201903/14/110419hzg56j5zf5fj66f8.jpg) 4. 在 fastlz_sample.c 添加 aes部分如下: ![11.JPG](/uploads/201903/14/110632i1bonxj89ne3o3xx.jpg) 5. 对同一个文件进行编码,发现生成数据长度不一样,第1部分少16字节数据如下图 ![11.JPG](/uploads/201903/14/111345bttb5yo5zokbvkn4.jpg) 第1 部分是生成后数据 第2部分是rt-thread固件打包工具生成的*.rtl数据 6.对编码之后文件解码发现有问题,还有在网上用aes256([http://tool.chacuo.net/cryptaes](http://tool.chacuo.net/cryptaes))数据完全不一样 ![11.JPG](/uploads/201903/14/111740fdt4wzwz7uwiisez.jpg)
查看更多
10
个回答
默认排序
按发布时间排序
hnhebing
2019-03-14
这家伙很懒,什么也没写!
我用nodejs 测试数据结果如下(aes.js): ``` const crypto = require('crypto'); function aesEncrypt(data, key, vi) { const cipher = crypto.createCipheriv('aes-256-cbc', key, vi); var crypted = cipher.update(data, 'utf8', 'binary'); crypted += cipher.final('binary'); // crypted = new Buffer(crypted,'binary').toString('base64'); crypted = Buffer.from(crypted,'binary').toString('base64'); return crypted; } function aesDecrypt(encrypted, key, vi) { // encrypted = new Buffer(encrypted,'base64').toString('binary'); encrypted = Buffer.from(encrypted,'base64').toString('binary'); const decipher = crypto.createDecipheriv('aes-256-cbc', key, vi); var decrypted = decipher.update(encrypted, 'binary', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; } var data = '!0123456789*0123456789*0123456789*0123456789*012345678912345678*'; var key = '0123456789ABCDEF0123456789ABCDEF'; var vi = '0123456789ABCDEF'; var encrypted = aesEncrypt(data, key, vi); var decrypted = aesDecrypt(encrypted, key, vi); console.log('原始数据 text: ' + data); console.log('编码后数据 text: ' + encrypted); console.log('解码后数据 text: ' + decrypted); ``` 测试结果如下: ``` D:\file_server>node aes.js ``` 原始数据 text: `!0123456789*0123456789*0123456789*0123456789*012345678912345678*` 编码后数据 text: `uK8TckBe4Jy9XpqQyH9GQPwqkSvs6XcHRrUf4UreXkhj+zr1P0pYmAmqN3Gchx9gz31IfQJpKwRO5MZM8+HO3LciZwZF0rvdsvaSM6k1FeQ=` 解码后数据 text: `!0123456789*0123456789*0123456789*0123456789*012345678912345678*`
hnhebing
2019-03-14
这家伙很懒,什么也没写!
网上计算工具:[https://www.it399.com/aes](https://www.it399.com/aes) 编码数据:
hnhebing
2019-03-22
这家伙很懒,什么也没写!
``` // 以下部分程序AES256 nodejs 已经调试OK var crypto = require('crypto'); /** * 加密方法 * @param key 加密key * @param iv 向量 * @param data 需要加密的数据 * @returns string */ var encrypt = function (key, iv, data) { var cipher = crypto.createCipheriv('aes-256-cbc', key, iv); var crypted = cipher.update(data, 'utf8', 'hex'); crypted += cipher.final('hex'); // crypted = new Buffer(crypted, 'binary').toString('base64'); return crypted; }; /** * 解密方法 * @param key 解密的key * @param iv 向量 * @param crypted 密文 * @returns string */ var decrypt = function (key, iv, crypted) { // crypted = new Buffer(crypted, 'base64').toString('binary'); var decipher = crypto.createDecipheriv('aes-256-cbc', key, iv); var decoded = decipher.update(crypted, 'hex', 'utf8'); decoded += decipher.final('utf8'); return decoded; }; var key = '0123456789ABCDEF0123456789ABCDEF'; console.log('加密的key:', key.toString('hex')); var iv = '0123456789ABCDEF'; console.log('加密的iv:', iv); var data = "0123456789123456"; console.log("需要加密的数据:", data); var crypted = encrypt(key, iv, data); console.log("数据加密后:", crypted); var dec = decrypt(key, iv, crypted); console.log("数据解密后:", dec); ``` //============================================================================= 运行后结果: ``` D:\DOWNLOAD\aes\zlib>node test_aes.js ``` 加密的key: `0123456789ABCDEF0123456789ABCDEF` 加密的iv: `0123456789ABCDEF` 需要加密的数据: `0123456789123456` 数据加密后: `1c5fdd7b10af0eb97f63bdf2ca78ec79b4b37690790a280612999601330a232c` 数据解密后: `0123456789123456`
hnhebing
2019-03-22
这家伙很懒,什么也没写!
[i=s] 本帖最后由 hnhebing 于 2019-3-22 09:42 编辑 [/i] 在qemu-vexpress-a9中运行 加密后数据正常,但是解密数据结果不对,现在找不到问题出在哪里? 程序如下: // 加密内容 rt_strncpy((char *)buffer, (const char *)"0123456789123456", 16); for(i=0; i<16;i++){ buffer[i+16] = 16; } // 加密 tiny_aes_setkey_enc(&ctx, (unsigned char *)"0123456789ABCDEF0123456789ABCDEF", 256); tiny_aes_crypt_cbc(&ctx, AES_ENCRYPT, 32, (unsigned char *)"0123456789ABCDEF", buffer, cmprs_buffer); // 解密 tiny_aes_setkey_dec(&ctx1, (unsigned char *)"0123456789ABCDEF0123456789ABCDEF", 256); tiny_aes_crypt_cbc(&ctx1, AES_DECRYPT, 32, (unsigned char *)"0123456789ABCDEF",cmprs_buffer, dcmprs_buffer); // 原始数据 rt_kprintf("\nconext:%s", buffer); rt_kprintf("\naes enc:"); for(i=0; i < 32; i++) { rt_kprintf("%02X ", cmprs_buffer[i]);[/i][i] } rt_kprintf("\naes dec:"); for(i=0; i < 32; i++) { rt_kprintf("%02X ", dcmprs_buffer[i]);[/i][i] } rt_kprintf("\n");[/i][/i][i][i] 运行如下: msh />aes_test conext:0123456789123456►►►►►►►►►►►►►►►► aes enc:1C 5F DD 7B 10 AF 0E B9 7F 63 BD F2 CA 78 EC 79 B4 B3 76 90 79 0A 28 06 12 99 96 01 33 0A 23 2C aes dec:B4 B3 76 90 79 0A 28 06 12 99 E6 71 43 7A 53 5C 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 msh /> [/i][/i]
MurphyZhao
认证专家
2019-03-22
这家伙很懒,什么也没写!
tiny_aes_crypt_cbc(&ctx, AES_ENCRYPT, 32, (unsigned char *)"0123456789ABCDEF", buffer, cmprs_buffer); 函数使用错误,不能传入静态的 iv
hnhebing
2019-03-22
这家伙很懒,什么也没写!
[i=s] 本帖最后由 hnhebing 于 2019-3-22 14:49 编辑 [/i] unsigned char iv[] = {"0123456789ABCDEF"}; unsigned char key[]={"0123456789ABCDEF0123456789ABCDEF"}; // 加密内容 rt_strncpy((char *)buffer, (const char *)"0123456789123456", 16); for(i=0; i<16;i++){ buffer[i+16] = 16; } // 加密 tiny_aes_setkey_enc(&ctx, &key, 256); tiny_aes_crypt_cbc(&ctx, AES_ENCRYPT, 32, &iv, buffer, cmprs_buffer); // 解密 tiny_aes_setkey_dec(&ctx1, &key, 256); tiny_aes_crypt_cbc(&ctx1, AES_DECRYPT, 32, &iv, cmprs_buffer, dcmprs_buffer); msh />aes_test conext:0123456789123456►►►►►►►►►►►►►►►► aes enc:1C 5F DD 7B 10 AF 0E B9 7F 63 BD F2 CA 78 EC 79 B4 B3 76 90 79 0A 28 06 12 99 96 01 33 0A 23 2C aes dec:B4 B3 76 90 79 0A 28 06 12 99 E6 71 43 7A 53 5C 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 msh /> 已经修改,结果还是一样!!
hnhebing
2019-03-22
这家伙很懒,什么也没写!
[i=s] 本帖最后由 hnhebing 于 2019-3-22 15:24 编辑 [/i] 参考:[https://www.aescrypt.com](https://www.aescrypt.com) 源码:[https://github.com/paulej/AESCrypt](https://github.com/paulej/AESCrypt)
MurphyZhao
认证专家
2019-03-22
这家伙很懒,什么也没写!
参考github仓库里面的例程,有问题打我脸 [https://github.com/RT-Thread-packages/tinycrypt/tree/master/samples](https://github.com/RT-Thread-pac ... tree/master/samples)
hnhebing
2019-03-22
这家伙很懒,什么也没写!
实例测试OK!!
sigma
2019-08-12
这家伙很懒,什么也没写!
解密时要知道加密前的数据长度吗?如果不是必需的话,怎么确定加密前的长度?
撰写答案
登录
注册新账号
关注者
0
被浏览
2.5k
关于作者
hnhebing
这家伙很懒,什么也没写!
提问
15
回答
62
被采纳
0
关注TA
发私信
相关问题
1
请教有没有嵌入式OTA升级数字签名,加密开源代码
2
请问STM32在RT THREAD里面,如简单地防止程序被读出?
3
RP2040虽好,但是没有加密功能,如果没有其它芯片带加密,根本不敢用于产品
4
关于mcu的加密方法
5
LKT(LCS)代码移植芯片优势
6
请问大家使用的国产支持硬件加密加速的MCU有哪些?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
7
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
3
次点赞
Ghost_Girls
1
篇文章
6
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部