Page 1 of 1

【已解决】Tuya os是否有AES 128加解密的接口

Posted: 2024年 Jan 31日 15:22
by Robertz

你好,我想在涂鸦os里使用AES128进行数据加密.请问我该如何实现?比如我需要将""通过AES128的ecb模式进行加密,并且输出32位字节的密文.请问在涂鸦os里如何实现??


Re: Tuya os是否有AES 128加解密的接口

Posted: 2024年 Feb 1日 10:14
by 一线长天

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加解密的接口

Posted: 2024年 Feb 1日 13:41
by Robertz

wbr1d的涂鸦os版本最高也才3.3.4,现在我该如何实现呢


Re: Tuya os是否有AES 128加解密的接口

Posted: 2024年 Feb 1日 13:48
by 一线长天

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);


Re: Tuya os是否有AES 128加解密的接口

Posted: 2024年 Feb 1日 15:34
by 15158693303

我调用了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]);
    }

Re: Tuya os是否有AES 128加解密的接口

Posted: 2024年 Feb 1日 15:38
by yingtao_33

你是如何调用的demo代码麻烦附一下


Re: Tuya os是否有AES 128加解密的接口

Posted: 2024年 Feb 1日 15:39
by 15158693303

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加解密的接口

Posted: 2024年 Feb 1日 16:02
by 卢台长

关于aes128_ecb_encode接口使用注意点

  1. 加密后输出的结果,函数内部会自动malloc长度(按pkcs7对齐方式),只要定义一个uint8_t指针即可,用完后需要释放aes_free_data即可
  2. 加密后输出的长度是uint32_t,而不是uint16_t,否则可能写穿内存
  3. 按你代码示例,数组初始化用字符串,用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);


Re: Tuya os是否有AES 128加解密的接口

Posted: 2024年 Feb 1日 17:52
by 15158693303

非常感谢.问题解决了