请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC1310 工具/软件:TI-RTOS
嘿、geeks
我将使用加密库中的 AES 128加密 API 和 CC1310。 加密类型为 ECB。 我只是从 UART 发送灯串并在终端上获取输出
在我的案例中、加密和解密工作很好的梗死我在输出时得到解密字符串、但问题是解密仅限于15字节。 如果有效载荷大小超过15字节、则加密字节仅限于15字节
这是我的 TI RTOS 代码
/*
=== uartecho.c ====
*/
#include
#include
/*驱动程序头文件*/
#include
#include
#include
/*示例/板头文件*/
#include "Board.h"
/*
=== mainThread ====
*/
*
* AES 128 CBC 加密测试
*/
#define PAYLOAD_LEN 100
typedef struct
{
uint8_t key[16]; //存储 AES 密钥
加密 CC26XX_KeyLocation 密钥位置;//密钥 RAM
中的位置 uint8_t cleartext[PAYLOAD_LEN]; //输入消息- cleartext
uint8_t msgOut[PAYLOAD_LEN]; //输出消息
} AESECBExample;
// AES ECB 示例数据
AESECBExample ecbExample =
{
0x2B、0x7E、0x15、0x16、0x28、 0xAE、0xD2、0xA6、
0xAB、0xF7、 0x15、0x88、0x09、0xCF、0x4F、 0x3C}、 //密钥128位
CRYPTOCC26XX_KEY_0、 //位置
{'t'、'h'、'i'、's'、'i'、's'、'a'、'l'、'a'、'i'、'n'、't'、'e'、'x'、't'}、 //文本消息
{0x0、0x0、0x0、0x0、0x0、0x0、 0x0、0x0、0x0、0x0、0x0、 0x0、0x0、0x0、0x0、0x0、 0x0}//Output message
};
//声明(通常在任务中完成)
CryptoCC26XX_handle 句柄;
int32_t KeyIndex;
Int32_t 状态;
CryptoCC26XX_AESECB_Transaction trans;
void * mainThread (void * arg0)
{
特性 输入;
const char echoPrompt[]="AES128加密示例";
const char prompt []="enterd data";
const char EncData[]="加密数据";
const char Enter[]="\r\n";
CHAR RxBuff[50];
uint8_t 计数= 0;
/*调用驱动程序初始化函数*/
GPIO_init();
USB_ON();
/*配置 LED 引脚*/
GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/*打开用户 LED */
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
USB_println (echoPrompt);
/*循环永久回显*/
while (1){
input=USB_read();
if (input!=NULL){
RxBuff[count]=输入;
if (RxBuff[count]='\r\n'){
RxBuff[count]=NULL;
计数= 0;
USB_printString ("输入数据:");USB_println (RxBuff);
///---------------------- 加密-----------------------------
CryptoCC26XX_init();
//尝试打开 CryptoCC26XX。
Handle = CryptoCC26XX_open (Board_CRYPTO0、false、NULL);
如果(!handle){
USB_printString ("无法打开加密模块。");
}
KeyIndex = CryptoCC26XX_allocateKey (handle、ecbExample.keyLocation、
(const uint32_t *) ecbExample.key);
if (keyIndex =CRYPTOCC26XX_STATUS_ERROR){
USB_printString ("未分配密钥位置。");
}
//初始化事务
CryptoCC26XX_transac_init ((CryptoCC26XX_Transaction *)&trans、CRYPTOCC26XX_OP_AES_ECB_encrypt);
//设置事务
TRANS.keyIndex = keyIndex;
TRANS.msgIn =(uint32_t *) RxBuff;
TRANS.msgOut =(uint32_t *) ecbExample.msgOut;
//使用 AES ECB 加密明文
状态= CryptoCC26XX_transact (handle、(CryptoCC26XX_Transaction *)&trans);
if (status!= CRYPTOCC26XX_STATUS_SUCCESS){
USB_printString ("加密失败");
}
USB_printString ("加密消息:");USB_println ((uint32_t *) transs.msgOut);
//初始化事务
CryptoCC26XX_transac_init ((CryptoCC26XX_Transaction *)&trans、CRYPTOCC26XX_OP_AES_ECB_Decrypt);
//设置事务
TRANS.keyIndex = keyIndex;
TRANS.msgIn =(uint32_t *) ecbExample.msgOut;
TRANS.msgOut =(uint32_t *) ecbExample.cleartext;
//在将 cypher 文本解密到 ecbExample.cleartext 数组之前,将原始清除文本归零
memset (ecbExample.cleartext、0x0、PAYLOAD_LEN);
//使用 AES ECB 解密明文
状态= CryptoCC26XX_transact (handle、(CryptoCC26XX_Transaction *)&trans);
if (status!= CRYPTOCC26XX_STATUS_SUCCESS){
USB_printString ("解密失败。");
}
CryptoCC26XX_releaseKey (句柄、&keyIndex);
USB_printString ("解密消息:");USB_println ((uint32_t *) ecbExample.cleartext);
///------------------ 终端加密---
}否则{
count++;
}
}
}
这是终端工具的屏幕截图
还有什么东西我在这里没有?
谢谢