Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
请教 tiny aes256 编码后,数据长度问题!!
发布于 2019-03-14 11:21:47 浏览:2434
订阅该版
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
这家伙很懒,什么也没写!
[i=s] 本帖最后由 hnhebing 于 2019-3-14 14:28 编辑 [/i] 我用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
这家伙很懒,什么也没写!
[i=s] 本帖最后由 hnhebing 于 2019-3-22 09:28 编辑 [/i] // 以下部分程序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.4k
关于作者
hnhebing
这家伙很懒,什么也没写!
提问
15
回答
62
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
STM32H7R7运行CherryUSB
2
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
3
使用RC522软件包驱动FM1722
4
常量数据类型和表达式陷阱分享
5
进行i2c驱动移植的经验总结
热门标签
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
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部