版权声明:希望能帮助你,也希望你帮助别人,哪怕一点点 https://blog.csdn.net/geek_monkey/article/details/53116226 </div>
<div id="content_views" class="markdown_views">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg>
<p> 1.创建密钥 <br>
Z-STACK协议栈在配置文件f8wConfig.cfg定义了密钥:
/* Default security key. */
-DDEFAULT_KEY="{0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0D}
- 1
- 2
所以用户只需要修改-DDEFAULT_KEY的值就可以定义自己使用的密钥。
2. 将ZGlobals.c 中的uint8 zgPreConfigKeys = FLASE;修改为TRUE;
如果这个值为真,那么默认的密钥必须在每个节点程序的配置文件中配置。如果这个值为假,那么默认的密钥只需配置到协调器设备当中,并且通过协调器节点发送给其他的节点。
// If true, preConfigKey should be configured on all devices on the network
// If false, it is configured only on the coordinator and sent to other
// devices upon joining.
uint8 zgPreConfigKeys = TRUE;
- 1
- 2
- 3
- 4
3. 将f8wConfig.cfg 文件中设置为-DSECURE=1使能AES加密
/* Set to 0 for no security, otherwise non-0 */
-DSECURE=1
- 1
- 2
最后,到这里整个加密过程结束,值得注意的是,如果使用了加密算法后,网络中所有的设备都需要开启这个算法,而且各个设备中的KEY必须相同。否则后果是很严重的,这会导致你的网络不能正常通讯,因为没有加密的数据或者相同KEY加密,这些数据网络是不认识的,根本就不会传到网络层。
加密算法开启以后,如果你需要修改代码,就必须改变你的KEY,或者是擦除一次你的flash,否则会出现不可逾期的错误,而且没有规律。通常的做法是擦除flash一次,这样可以保证和整个网络的KEY相同。
在进行加密之后,应用层的负载变为了加密后的格式。
抓包分析:加密前
同样的数据加密后