欢迎来到天天文库
浏览记录
ID:28056628
大小:70.00 KB
页数:5页
时间:2018-12-08
《实验四公钥加密算法实验(改)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验四公钥加密算法实验1、实验H的掌握消息RSA密钥生成和加密算法的原理。2、实验环境硬件:ZXBeeCC2530节点板2块、USB接口的CC2530仿真器,PC机;软件:Windows7/WindowsXP、IAR集成开发环境、串口监控程序。3、实验原理RSA算法的关键是生成公钥私钥对。本实验采用了一个简化的算法,通过一个给定的seed(实验组号)搜索两个不同的素数(100以A),并计算出公钥PubliceKey(e,n)和私钥PrivateKey(d,n)。RSA加/解密公式为C=Pemodn和P=Cdmodn,其中的幂指数运算速度
2、慢,可采用下面的公式进行转换:C=Pemodn=((...((P*Pmodn)*Pmodn)*Pmodn))*Pmodn此外,RSA算法的明文和密文均为0到n-1之间的整数,而一般传送消息的长度单位为字节(8bits),n的大小与消息长度难以匹配。因此,本实验采用如下的特殊处理方法:(1)令选定公钥/私钥的n值小于65536,即n值小于16bits的二进制。(2)将消息的每个字节(8biU)作为一个明文块。(3)每个明文块进行RSA加密后,得到的密文块为16bits,用2个字节存放。即密文的长度为明文的2倍。(4)接收方收到的密文,按2
3、个字节为一个密文块进行RSA解密,解密后的结果只保留低8bits。4、实验步骤1)本实验程序可在《指导书》4.4节程序上进行修改,可节约时间。信道编号不用更改。2)增加下列有关公钥和私钥的定义(全局定义)。typedefstruct{unsignedinte;unsignedintn;}RSA_PUBLICKEY;typedefstruct{unsignedintd;unsignedintn;}RSA_PRIVATEKEY;typedefstruct{RSA_PUBLICKEYPu;RSA_PRIVATEKEYPr;}RSAKEY;3)
4、增加一个RSA公钥/私钥产生函数。RSA_KEYCreateRSAKey(unsignedintseed){RSA_KEYRSAKey;unsignedinti,j;unsignedinta,b,temp;unsignedintp=O,q=O,fi=O;i=(seed*71-17)%29+ll;//产生第一个素数搜索的初始值,只搜索11〜39//搜索素数pwhile(p==O){for(j=2;j<=i/2-l;j++)if(i%j==O)break;if(j>(i/2-l)&&p==0)p=i;i=(i-10)%29+ll;i=(se
5、ed*171-51)%29+ll;//产生第二个素数搜索的初始值,只搜索11〜39//搜索素数qwhile(q==O){for(j=2;j<=i/2-l;j++)if(i%j==O)break;if(j>(i/2-l)&&i!=p&&q==0)q=i;i=(i-10)%29+ll;}RSAKey.Pu.n=p*q;RSAKey.Pr.n=p*q;fi=(p-l)*(q-l);//找出一个小于fi且与fi互素的efor(i=3;i6、a%b;a=temp;}if(a=l){RSAKey.Pu.e=i;break;}}"计算clj=l;while((fi*j+1)%RSAKey.Pu.e!=O)j++;RSAKey.Pr.d=(fi*j+l)/RSAKey.Pu.e;//printf(,,p=%d,q=%d,",p,q);//printf("e=%d,d=%d,n=%d,RSAKey.Pu.e,RSAKey.Pr.d,RSAKey.Pu.n);returnRSAKey;1)增加一个RSA加密函数。//RSA加密函数,PlainText力8bit数组,Cipher7、Text为16bits数组,Len为PlainText长度voidRSA_Encrypt(RSA_PUBLICKEYPuKey,uint8*PlainText,uint!6*CipherText,intLen){inti=0,j=0;uintl6temlnt=0;for(i=0;i8、DataO。发送节点每隔Is发送一次数据。发送数据的格式为:字段名称接收方编号明文长度密文长度(字节)112-256代码:/*发送数据函数*/voidrfSendData(void){uint8PlainT
6、a%b;a=temp;}if(a=l){RSAKey.Pu.e=i;break;}}"计算clj=l;while((fi*j+1)%RSAKey.Pu.e!=O)j++;RSAKey.Pr.d=(fi*j+l)/RSAKey.Pu.e;//printf(,,p=%d,q=%d,",p,q);//printf("e=%d,d=%d,n=%d,RSAKey.Pu.e,RSAKey.Pr.d,RSAKey.Pu.n);returnRSAKey;1)增加一个RSA加密函数。//RSA加密函数,PlainText力8bit数组,Cipher
7、Text为16bits数组,Len为PlainText长度voidRSA_Encrypt(RSA_PUBLICKEYPuKey,uint8*PlainText,uint!6*CipherText,intLen){inti=0,j=0;uintl6temlnt=0;for(i=0;i8、DataO。发送节点每隔Is发送一次数据。发送数据的格式为:字段名称接收方编号明文长度密文长度(字节)112-256代码:/*发送数据函数*/voidrfSendData(void){uint8PlainT
8、DataO。发送节点每隔Is发送一次数据。发送数据的格式为:字段名称接收方编号明文长度密文长度(字节)112-256代码:/*发送数据函数*/voidrfSendData(void){uint8PlainT
此文档下载收益归作者所有