IOT安全技术综合实验报告1Word文档格式.docx

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

IOT安全技术综合实验报告1Word文档格式.docx

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

IOT安全技术综合实验报告1Word文档格式.docx

光强传感器使用的是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<

strlen(key);

i++)

mingwen[i]=key[i];

encrypt(Be,Bn);

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

printf("

对加密的结果为:

"

);

{

sendBuf[i]=c[i];

printf("

%d"

c[i]);

\n"

tcp_send();

//发送秘钥

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

file_open();

//开启文件

while(fgets(str,N,fp)!

=NULL){

printf("

传感器的数据为:

);

%s\n"

str);

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

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

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

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

cdi;

i++){

encrypts[i]=pData[i];

//放于MD5的加密数组中

pData[i]);

2、执行界面

图7

四、消息认证(签名)

1、消息保护的原理:

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

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

其数字签名的内容为:

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

3、核心代码

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

MD5加密前的数据为:

for(i=0;

strlen(str);

printf("

encrypts[i]);

}

MD5Update(&

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

MD5Final(&

md5,decrypts);

MD5加密后:

16;

{

%d"

decrypts[i]);

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

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

16+strlen(str);

mingwen[i]=M2[i];

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