/*发送数据函数 */ void rfSendData(void) { uint8 PlainText[]={'G','D','U','T', '2', '5'}; //明文,请将'2', '5'更改为各个小组的组号 uint16 CipherText[sizeof PlainText]; //密文 uint8 pTxData[128]; //存放发送数据 RSA_KEY Key=CreateRSAKey(25); //请将25更改为各个小组的组号 RSA_Encrypt( Key.Pu, PlainText, CipherText, sizeof PlainText ); //产生密文 pTxData[0]=25; //请将25更改为各个小组的组号 pTxData[1]=sizeof PlainText memcpy(pTxData+2, CipherText, sizeof CipherText); while(TRUE){ basicRfSendPacket(RECV_ADDR, pTxData, (sizeof CipherText)+2); //发送数据 halMcuWaitMs(1000); } } 注意,上面代码有三个地方需要改为各实验小组的组号。
6)修改接收数据函数rfRecvData()。接收节点不断接收各个发送节点发送的信息,先判断数据的第一个字节是不是本站点,如果是再进行解密。通过串口显示结果。
/* 接收数据函数 */ void rfRecvData(void) { uint8 pRxData[128]; //用来存放接收到的数据 int i,rlen; basicRfReceiveOn(); //打开接收器 uint8 PlainText[64]; while (TRUE) { while(!basicRfPacketIsReady()); //等待直到数据准备好 rlen = basicRfReceive(pRxData, sizeof pRxData, NULL); //接收数据 if(rlen > 0 && pRxData[0]==25) { //接收到数据且为发送给本站点的。请修改本小组的组号 for(i=0;i 7)编写一个RSA解密函数RSA_Decrypt ( )。其中省略号部分自己填充完成。 21 /* RSA解密函数 */ void RSA_Decrypt( RSA_PRIVATEKEY PrKey, uint16 *CipherText, uint8 *PlainText, int Len ) { int i=0, j=0; uint16 temInt = 0; for( i=0; i if(rlen > 0 && pRxData[0]==25) { //接收到数据,且为发送给本站点的 RSA_Decrypt(Key.Pr, pRxData+2, PlainText, pRxData[1]); for(i=0;i 实验的结果注意观察下列情况,并对比(截图保存)。 1) 发送节点发送密文,接收节点接收后显示密文,对应步骤6。 2)发送节点发送密文,接收节点接收后解密并显示明文,对应步骤8。 22 六、实验总结 经过本次实验,我掌握了消息RSA密钥生成和加密算法的原理,学会了自己编写一个RSA解密函数,并通过调用这个函数来对接收到的密文进行解密,更加深刻地理解了非对称加密算法的运用。 23