你好,我想在涂鸦os里使用AES128进行数据加密.请问我该如何实现?比如我需要将""通过AES128的ecb模式进行加密,并且输出32位字节的密文.请问在涂鸦os里如何实现??
【已解决】Tuya os是否有AES 128加解密的接口
Re: Tuya os是否有AES 128加解密的接口
TuyaOS-3.5及之后的SDK均提供了加解密组件tal_security。
具体可以参考tal_security.h以及tal_symmetry.h。
//aes128_ecb加密
OPERATE_RET tal_aes128_ecb_encode_raw(UINT8_T *data,
size_t len,
UINT8_T *ec_data,
UINT8_T *key );
//aes128_ecb解密
OPERATE_RET tal_aes128_ecb_decode_raw(UINT8_T *data,
size_t len,
UINT8_T *dec_data,
UINT8_T *key );
Re: Tuya os是否有AES 128加解密的接口
wbr1d的涂鸦os版本最高也才3.3.4,现在我该如何实现呢
Re: Tuya os是否有AES 128加解密的接口
3.3的SDK可以使用aes_inf.h头文件里的API
OPERATE_RET aes128_ecb_encode(IN CONST BYTE_T *data, IN CONST UINT_T len, \
OUT BYTE_T **ec_data, OUT UINT_T *ec_len, \
IN CONST BYTE_T *key);
OPERATE_RET aes128_ecb_decode(IN CONST BYTE_T *data, IN CONST UINT_T len, \
OUT BYTE_T **dec_data, OUT UINT_T *dec_len, \
IN CONST BYTE_T *key);
-
- Posts: 36
Re: Tuya os是否有AES 128加解密的接口
我调用了aes128_ecb_encode后,日志打印显示为啥都是00,一下为代码
BYTE_T data[] ="l8hpkkjnn93mx0pe";
BYTE_T datakey[] ="6r4mq0ptoan2wf70";
uint16_t len1=0;
Code: Select all
BYTE_T data1[37]={0};
TAL_PR_DEBUG("datalen:%d",sizeof(data)/sizeof(data[0]));
aes128_ecb_encode(data,sizeof(data)/sizeof(data[0]),&data1,&len1,datakey);
for(int i=0;i<sizeof(data1)/sizeof(data1[0]);i++)
{
TAL_PR_DEBUG("AES_DE: %02x", data1[i]);
}
- Attachments
-
-
- Posts: 245
Re: Tuya os是否有AES 128加解密的接口
你是如何调用的demo代码麻烦附一下
-
- Posts: 36
Re: Tuya os是否有AES 128加解密的接口
Code: Select all
BYTE_T data[] ="l8hpkkjnn93mx0pe";
BYTE_T datakey[] ="6r4mq0ptoan2wf70";
uint16_t len1=0;
BYTE_T data1[37]={0};
TAL_PR_DEBUG("datalen:%d",sizeof(data)/sizeof(data[0]));
aes128_ecb_encode(data,sizeof(data)/sizeof(data[0]),&data1,&len1,datakey);
for(int i=0;i<sizeof(data1)/sizeof(data1[0]);i++)
{
TAL_PR_DEBUG("AES_DE: %02x", data1[i]);
}
Re: Tuya os是否有AES 128加解密的接口
关于aes128_ecb_encode接口使用注意点
- 加密后输出的结果,函数内部会自动malloc长度(按pkcs7对齐方式),只要定义一个uint8_t指针即可,用完后需要释放aes_free_data即可
- 加密后输出的长度是uint32_t,而不是uint16_t,否则可能写穿内存
- 按你代码示例,数组初始化用字符串,用sizeof计算会多包含一个'\0',可以使用strlen来计算长度
参考:
Code: Select all
BYTE_T data[] ="l8hpkkjnn93mx0pe";
BYTE_T datakey[] ="6r4mq0ptoan2wf70";
UINT32_T outlen = 0;
BYTE_T *outdata = NULL;
aes128_ecb_encode(data, strlen(data), &outdata, &outlen, datakey);
TAL_PR_DEBUG("AES_DE: ");
for (int i = 0; i < outlen; i++) {
TAL_PR_DEBUG("%02x", outdata[i]);
}
aes_free_data(outdata);
-
- Posts: 36
Re: Tuya os是否有AES 128加解密的接口
非常感谢.问题解决了