Z-stack对Zigbee2006提供了全面的支持,功能之强大,性能稳定、安全性高,说到安全性是我们今天的主题。CC2430硬件支持128bit的AES加密算法,在协议栈中为了避开相同设备的干扰,和防止被其他设备监听,我们就采用这个技术将数据加密来提高数据的安全性。

AES(The Advanced Encryption
Standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。AES
是一个新的可以用于保护电子数据的加密算法。明确地说,AES
是一个迭代的、对称密钥分组的密码,它可以使用128、192
和 256
位密钥,并且用 128
位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据

的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations
)和替换(substitutions)输入数据。

在Z-stack中采用的是128bit的加密,首先需要一个128bit的key,这个KEY不同,加密出来的内容也不同在Z-stack中是通过DEFAULT_KEY="{0x01, 0x03, 0x05, 0x07, 0x09, 0x0B,
0x0D, 0x 0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C,
0x0D}"这种方式来定义的。

在Z-stack中已经在协议栈中实现了这个加密算法,如果需要使用直接开启这个服务就可以了,下面我们主要将Z-stack的加密算法的开启。

Z-stack1.4.3加密算法的功能开启方法:

1.将f8wConfig.cfg文件中设置为-DSECURE=1,这句话的意思是SECURE=1,这个变量在协议栈中作为if语句的条件使用,条件为真的语句中就是开启加密算法的函数。所以要使用第一步是要将这个参数设置为1。

2.将ZGlobals.c中的uint8 zgPreConfigKeys = FLASE;修改为uint8 zgPreConfigKeys = TRUE;

3.准备一个key,这个可以在函数nwk_global.c中修改:

CONST byte
defaultKey[SEC_KEY_LEN] =

{

#if defined ( APP_TP
) || defined ( APP_TP2 )

// Key for ZigBee
Conformance Testing

0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,

0x89, 0x67, 0x45,
0x23, 0x01, 0xEF, 0xCD, 0xAB

#else

// Key for In-House
Testing

0x00, 0x01, 0x02,
0x03, 0x04, 0x05, 0x06, 0x07,

0x08, 0x09, 0x0A,
0x0B, 0x0C, 0x0D, 0x0E, 0x0F

#endif

};

如果使用了加密算法后,网络中所有的设备都需要开启这个算法,而且各个设备中的key必须相同。否则后果是很严重的,这会导致你的网络不能正常通讯,因为没有加密的数据或者相同key加密,这些数据网络是不认识的,根本就不会传到网络层。

加密算法开启以后,如果你需要修改代码,就必须改变你的key,或者是擦除一次你的flash,否则会出现不可逾期的错误,而且没有规律。通常的做法是擦除flash一次,这样可以保证和整个网络的key相同。

采用这个加密算法的好处是:如果一个网络在做实验,你再随便加入一个协调器或者路由或者终端对现有的网络状态不会造成影响,这样就可以进行多个并行实验了。

ZigBee协议栈中AES加密算法的更多相关文章

  1. [ZigBee] 16、Zigbee协议栈应用(二)——基于OSAL的无线控制LED闪烁分析(下)

    说在前面:上一篇介绍了无线LED闪烁实现的OSAL部分,本篇介绍如何实现无线数据收发及数据处理: 上一篇是用SI跟着流程查看源码,我个人认为以架构的思维去了解代码能让人更清晰 ::ZMain.c程序入 ...

  2. AES加密算法C++实现

    我从网上下载了一套AES加密算法的C++实现,代码如下: (1)aes.h #ifndef SRC_UTILS_AES_H #define SRC_UTILS_AES_H class AES { pu ...

  3. [ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)

    1.Zigbee协议栈简介 协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收.协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用 ...

  4. 第1章 ZigBee协议栈初始化网络启动流程

    作者:宋老师,华清远见嵌入式学院讲师. ZigBee的基本流程:由协调器的组网(创建PAN ID),终端设备和路由设备发现网络以及加入网络. 基本流程:main()->osal_init_sys ...

  5. Qt使用AES加密算法对字符串进行加密

          因工作需要,需要对字符串进行加密处理,在网上找了很长时间,终于找到了一个可以使用的aes加密算法.其源代码采用c++编写而成,但其头文件引用windows.h,经过修改部分代码,将#inc ...

  6. Android AES加密算法及事实上现

    昨天老大叫我看看android加密算法.于是网上找了找,找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  7. Android AES加密算法,现在实际上

    昨天,老板让我来看看android加密算法.于是在网上找了找,发现AES加密算法.(当然,MD5,BASE64什么http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  8. 【java编程】加密算法-对称加密及AES加密算法

    转载:https://www.jianshu.com/p/3840b344b27c?utm_campaign=maleskine&utm_content=note&utm_medium ...

  9. 协议栈中使用crc校验函数

    CRC校验介绍:循环冗余校验码,原理是多项式除法 ZigBee协议栈:能够使zigbee节点相互之间组网,数据传输,数据获取,数据显示 思路以及步骤: 1.因为IAR的程序是用c写的,所以上网查找如何 ...

随机推荐

  1. 《转》 EJB到底是什么,真的那么神秘吗??

    1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...

  2. Django与数据库操作

    Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接) Flask,tornado --- pymysql SQLArch ...

  3. Android 反编译 -smali语法

    前言 前面我们有说过android反编译的工具,如何进行反编译.反编译后可以得到jar或者得到smali文件.Android采用的是java语言 进行开发,但是Android系统有自己的虚拟机Dalv ...

  4. 苹果iOS11重磅改版App Store,开发者应该了解这些

    苹果在WWDC2017上重磅发布iOS11,其中一项重大更新就是对App Sore的全新改版,我们一起来看看具体有哪些变化,以及对我们会带来哪些影响. App Store的分类变化 在iOS10以前, ...

  5. beego配置文件

    关于App配置: #App配置 for Api AppName = ApiService RunMode = dev RouterCaseSensitive = true ServerName = A ...

  6. 你必须知道的495个C语言问题,学习体会一

    C语言作为一门古老的语言,其灵活性和容易出错都让人 又爱又恨,书籍<你必须知道的495个C语言问题>,使用问答的形式,告诉读者 C语言使用的各个方面的知识,包括一些冷知识等.以下,我要摘录 ...

  7. ecmall分页

    在Ecmall的二次开发中,分页是必不可少的.这个系统已经自带了分页功能,下面来看看如何使用这个分页. 下面是一个自定义的类,用于查看订单的详细情况.关键在于get_order_data()这个方法, ...

  8. jquery ajax 跨域设置

    xhrFields: { withCredentials: true},crossDomain: true,

  9. next.js 简单使用

    1. 介绍 一个react.js 服务器端渲染开源项目(不只是服务器端渲染,直接也可以生成纯静态站点) 类似的解决方案有好多,比如react.js 自身的服务器渲染方案(但是使用起来就是比较怪异) g ...

  10. MySQL中的交并差

    Mysql只提供了并集(union),没有提供差集,和交集,但是我们可以用union来实现交和差,下面即是实现方式: 首先创建两个表: ERROR 1064 (42000): mysql> cr ...