IOT安全技术综合实验报告1.docx

上传人:b****8 文档编号:9560305 上传时间:2023-02-05 格式:DOCX 页数:12 大小:317.77KB
下载 相关 举报
IOT安全技术综合实验报告1.docx_第1页
第1页 / 共12页
IOT安全技术综合实验报告1.docx_第2页
第2页 / 共12页
IOT安全技术综合实验报告1.docx_第3页
第3页 / 共12页
IOT安全技术综合实验报告1.docx_第4页
第4页 / 共12页
IOT安全技术综合实验报告1.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

IOT安全技术综合实验报告1.docx

《IOT安全技术综合实验报告1.docx》由会员分享,可在线阅读,更多相关《IOT安全技术综合实验报告1.docx(12页珍藏版)》请在冰豆网上搜索。

IOT安全技术综合实验报告1.docx

IOT安全技术综合实验报告1

 

IOT安全技术综合实验报告

 

班级:

物联网18-

(1)班

学号:

**********

姓名:

*****

 

物联网安全技术综合实验报告

一、实验内容

对各种传感器采集到的数据提取出来(2种以上类型数据),进行加密和认证操作,编写网络传输程序,在发送端将加密和认证后的数据发出,在接收端对接收到的数据验证和解密,提取出原始的传感器数据。

加密算法和认证算法需要自己编写程序,不得使用网上现有的加密工具,必须有可运行的源代码,可采用DES、AES、RC4等对称加密算法对数据进行加密,采用RSA等公钥密码对数据加密密钥进行加密,采用消息认证码或数字签名机制对数据进行认证。

二、采集数据

1、硬件设备

1)传感器的作用。

本次实现中,硬件的功能为采集传感器的数,然后通过串口传输到电脑端的串口助手中,再通过串口助手的存储数据功能,实现把传感器数据存储到一个txt类型的文档中。

硬件模块包括光强传感器和主控CC2530单片机。

2)光敏传感器通过iic的通信协议,与cc2530单片机进行通信。

光强传感器使用的是BH1750,硬件系统结构图1所示。

图1

3)硬件电路设计。

BH1750传感器采用IIC总线,其中SCL连接到CC2530单片机的P0_0端口,SDA连接CC2530单片机的P0_1端口。

图2

2、实验步骤

1)首先按照原理图,进行实物图的连接,连接效果如图3,采集模块的六号框为光强传感器。

图3

2)在win10环境下,利用IARFor8051编写程序(图4),程序的功能为:

读取湿度传感器的值,并通过串口发送出去,串口波特率为38400。

图4

3)通过SmartRF04仿真器连接cc2530和电脑,并利用FlashPromgrammer工具,把程序烧录到单片机中,接着开启串口助手,配置好波特率后即可看到这样的数据“light=124.0”。

4)对数据进行记录存储后,得到我们想要的数据文件,文件类型为txt文档。

文档的部分内容如图5所示。

图5

3、主要代码及注释

1)本次硬件代码的步骤为,通过iic获取传感器的值,然后通过串口上传,稍作延时后,进行第二次循环。

2)核心部分代码一,上传光强值。

//获取传感器的值

p=bh1750_get_data();

//将光强值写入到要发送的数组中

sprintf(p,"%.1f",light);

//通过串口上报光强值

ZXBeeAdd("light",p);

3)核心部分代码二,获取传感器值:

floatbh1750_get_data(void)//返回值为传感器的光强值。

{

uchar*p=buf;

bh1750_init();//初始化BH1750

bh1750_send_byte(0x46,0x01);//poweron

bh1750_send_byte(0x46,0X20);//H-resolutionmode

delay_ms(180);//延时180ms

bh1750_read_nbyte(0x46,p,2);//连续读出数据,存储在BUF中

unsignedshortx=buf[0]<<8|buf[1];

returnx/1.2;}

三、加密解密算法

1、基本原理

1)数据整体原理。

本次的加密解密在电脑端模拟完成,共分为两个程序,分别为客户端程序和服务器端程序,客户端程序负责,向服务器端程序传输,对明文处理后的数据,服务器端负责接收客户端发送过来的数据,并对数据进行验证及解密分析。

2)整体算法流程图:

图6

3)本次用来对秘钥进行加解密算法有:

RSA,首先是在客户端tcp连接服务器后,通过RSA算法,利用服务器B的公钥进行加密RC4的秘钥,发送给B,然后B采用自己的私钥进行解密,得到秘钥K。

4)本次对明文的加密方式采用的是:

RC4,在传输完秘钥后,客户端程序先读取一行数据文件的传感器数据,并通过RC4的加密方式,利用秘钥K进行数据加密,生产密文m1。

2、主要代码及注释

1)加密及发送秘钥的核心代码:

for(i=0;i

mingwen[i]=key[i];

encrypt(Be,Bn);//rsa通过B的公钥加密,加密mingwen[]数组中的数据,结果存于c[]数组中。

printf("对加密的结果为:

");

for(i=0;i

{

sendBuf[i]=c[i];

printf("%d",c[i]);

}

printf("\n");

tcp_send();//发送秘钥

3)读取一行文档数据的核心代码:

file_open();//开启文件

while(fgets(str,N,fp)!

=NULL){

printf("传感器的数据为:

",);

printf("%s\n",str);

4)对数据进行RC4加密的核心代码:

//RC4加密,加密后的数据在pData中

rc4_crypt(s,(unsignedchar*)pData,cdi);

printf("\n进行RC4加密得到的结果为:

");

for(i=0;i

encrypts[i]=pData[i];//放于MD5的加密数组中

printf("%d",pData[i]);

}

printf("\n");

 

2、执行界面

图7

四、消息认证(签名)

1、消息保护的原理:

1)消息完整性的验证,对RC4加密后的密文进行MD5运算,得到128位散列值,接收方解密得到散列值后,再对收到的RC4加密后的密文进行一次MD5运算,如果两处计算得到的散列值都一样,则说明,消息没有被篡改,可以进行下一步使用。

2)来源的认证,采用的实现算法是RSA,客户端利用自己的私钥进行加密报文,然后发给服务器端,服务器端利用客户端的公钥进行解密认证。

其数字签名的内容为:

RC4加密后的密文与MD5加密后的密文。

3、核心代码

1)MD5加密的使用核心代码:

printf("MD5加密前的数据为:

");

for(i=0;i

printf("%d",encrypts[i]);

}

printf("\n");

MD5Update(&md5,encrypts,strlen((char*)encrypts));

MD5Final(&md5,decrypts);

printf("MD5加密后:

");

for(i=0;i<16;i++)

{

printf("%d",decrypts[i]);

}

 

3)利用RSA进行数字签名的核心代码:

//RSA加密,身份认证,encrypt(e,n)把全局定义的mingwen[256]进行加密,结果存于c[256]

for(i=0;i<16+strlen(str);i++){

mingwen[i]=M2[i];

printf("%d",mingwen[i]);

}

encrypt(Ad,An);//rsa通过A的私钥加密

4、实现界面:

1)发送端界面:

图8

2)接收端界面:

图9

五、网络传输

1、实现原理:

1)本次采用的是网络传输方式是tcp协议,通过在电脑端开启两个程序,一个作为tcp服务器一个作为客户端进行tcp连接,进而实现数据的交互。

2)由于本次进行tcp发送的值为RSA签名加密的结果,且本程序的RSA算法的结果为unsignedint型数组,因为其值可能出现大于256,但是网络传输的tcp协议,一次报文传输的数据为unsignedchar型,出现了数据丢失现象,故需要把RSA计算的结果进行拆分,如一个unsignedint型数据拆分成为两个unsignedchar型数据,然后再通过tcp发送过去,接收方收到数据后,再按照规律两个数据组合成为一个数据。

拆分如下图。

图10

5、核心代码:

1)数组的拆分核心代码:

unsignedcharchang[2];

//把参数分解成为两个char的数据并存于chang[2]中,高位在前,低位在后。

voidi_2c(unsignedintnum){

//高位在前,低位在后

unsignedintnum2;

chang[1]=num%256;//取后面的值

num2=num/256;

chang[0]=num2%256;//取前面的值

}

2)数组的合并的核心代码:

//对chang中的数据进行结合,把结果返回

unsignedinttc_i(){

//高位在前,低位在后

unsignedintval=1;

val*=chang[1];//取后面的值

val+=chang[0]*256;//取前面的值

returnval;

}

3)tcp连接的核心代码

sockClient=socket(AF_INET,SOCK_STREAM,0);

addrServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

addrServer.sin_family=AF_INET;

addrServer.sin_port=htons(6000);

connect(sockClient,(SOCKADDR*)&addrServer,sizeof(addrServer));

六、总结与收获

在本次实训中,我更加熟练了各种加解密算法的运用,及其优缺点,也更加理会到了其中的组合逻辑,层层嵌套,层层相互作用及其验证,如今物联网行业发展迅速,其数据的安全性更是不容小视,在本次实验中,我学会了物联网数据结合加解密算法的处理。

本次实验中,令我印象最深刻的问题是RSA签名中加密后数据的大小问题,在程序执行的最后一步,把需要传输的数据写入到tcp传输的数组里后,出现了数据丢失,且在之前的秘钥传输过程中,秘钥的值比较小,没有出现加密结果单个数大于256,即出现了加解密成功。

这导致了问题更加难发现,在最后把数据都打印出来后,发现接收到的数据和发送的数据不一致,出现了丢失,如:

传输1520,则只传输出去的值为240。

最终发现是tcp传输的数组为unsignedchar类型的,最大值是256,但已经到程序的最后一步了,如果修改别的验证方法工作量会非常大,故采用了分割发进行解决,如:

把待传输的200个unsignedint型数组转化成为400个unsignedchar型数组进行发送,接收到后再重新恢复为200个unsignedint型数组。

所幸的是问题得到了解决。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1