CC2541使用协议栈的数据加密与解密功能教程
一、简介
本篇以SimpleBLEPeripheral工程为例,介绍CC2541如何使用协议栈的数据加密与解密功能。
实验平台
协议栈版本:BLE-CC254x-1.4.0
编译软件:IAR 8.20.2
硬件平台:Smart RF开发板
二、协议栈的加密与解密的简介
1、为什么需要加密与解密?
答:蓝牙数据是可以通过空中抓包而被抓取到的,因此需要将通信数据进行加密,这样别人即使知道了加密后的数据,也无法利用该数据。
2、加密与解密的过程是如何?
答:
加密过程:需要加密的数据A与秘钥KEY进行一定的算法,获得加密过的数据B。
解密过程:加密过的数据B与秘钥KEY进行一定的逆运算算法,获得加密前的数据A。
三、测试代码
1、修改按键处理函数(SimpleBLEPeripheral.c中)
[cpp] view plain copy
static void simpleBLEPeripheral_HandleKeys( uint8 shift, uint8 keys )
{
VOID shift; // Intentionally unreferenced parameter
//加密秘钥 16个字节=128bit
uint8 key[16] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};
//需要加密的数据
uint8 data[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
//加密后数据存放区
static uint8 EncryptedData[16] = {0};
//解密后数据存放区
static uint8 DeccryptedData[16] = {0};
if ( keys & HAL_KEY_UP )
{
HalLcdWriteString( "Encrypt OK", HAL_LCD_LINE_8 );
LL_Encrypt(key, data, EncryptedData); //加密
}
if ( keys & HAL_KEY_DOWN )
{
HalLcdWriteString( "Decrypt OK", HAL_LCD_LINE_8 );
LL_EXT_Decrypt(key, EncryptedData, DeccryptedData); //解密
}
}
加密与解密的函数都是三个参数,并且三个参数都要求是128bit(16字节)。如果实际中数据不足16字节,可自己补足数据至16字节,如添加几个0xFF。
注:实际上加密与解密的函数应该分别用在两台机子上,这里只是在同一台机子上测试。
2、实验结果
1)按五向按键的UP键,协议栈会将加密后的数据存进缓冲区EncryptedData。
2)按五向按键的DOWN键,协议栈会将破解后数据存进缓冲区DeccryptedData。
破解后的数据与data缓冲区的“0x01~0x10”数据一致,因此破解成功。
|