随机数加密算法的解密算法
解密程序就是利用加***把加密的文档即秘文用**恢复成原来的文档。算法实现的原理就是用**把秘文文档重新编号,然后按**的排序结果输出秘文,就可以得到原加密的文档,也就达到了解密的目的。
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <iostream>
void main (int argc, char * argv[])
{
char str[15];//用于保存加密的字符串
int myid, numprocs; //进程号、进程数
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Status status;
MPI_Init ( &argc, &argv );
MPI_Comm_rank ( MPI_COMM_WORLD, &myid );
MPI_Comm_size ( MPI_COMM_WORLD, &numprocs );
MPI_Get_processor_name(processor_name,&namelen);
if(myid==0) //读取**信息,并把**传给1号进程。
{
FILE *key=fopen("key.txt","r");
if(key){
int temp;
temp=fgetc(key)-48;
fprintf(stderr,"**:");
/*读到文件结束,结束符为-1,ASCII码是-1-48=-49,所以把-49作为文件结束标志*/
while(temp!=-49)
{
fprintf(stderr,"%d",temp);
MPI_Send(&temp,1,MPI_INT,1,0,MPI_COMM_WORLD);
temp=fgetc(key)-48;
}
fprintf(stderr,"/n");
MPI_Send(&temp,1,MPI_INT,1,0,MPI_COMM_WORLD);
}
}else if(myid==1)//1号进程负责用接收到**解密加密的文档。
{
int recvnum=0;
FILE *out=fopen("out.txt","r");//打开要解密的文档
fgets(str,15,out);
fprintf(stderr,"密文:");
fprintf(stderr,str);
fprintf(stderr,"/n");
FILE *source=fopen("source.txt","w");//用于保存解密后的文档
MPI_Recv(&recvnum,1,MPI_INT,0,0,MPI_COMM_WORLD,&status);
fprintf(stderr,"解密后的原文是:");
while(recvnum!=-49)//读到文件尾,结束
{
fprintf(stderr,"%c",str[recvnum]);
fprintf(source,"%c",str[recvnum]);
MPI_Recv(&recvnum,1,MPI_INT,0,0,MPI_COMM_WORLD,&status);
}
fprintf(stderr,"/n");
}
fprintf( stderr, "Process %d of %d on %s/n",myid, numprocs, processor_name );
MPI_Finalize ( );
}
说明:利用加密后的密文:out.txt和解***key.txt解密,密文为:udenctu.jb,**为9805721643。如上图所示,解密后的文档保存到source.txt中。