📄 mpi_aes.cpp
字号:
#define HAVE_NO_VARIABLE_RETURN_TYPE_SUPPORT 1
#include <mpi.h>
#include <afx.h>
#include <iostream>
#include "aes.h"
#include "cpu.h"
using namespace std;
using std::cout;
using std::endl;
// #define HAVE_NO_VARIABLE_RETURN_TYPE_SUPPORT 1
int main(int argc, char *argv[])
{
int myid/*,numprocs*/; /* 整型变量 myid 和 numprocs 分别用来记录某一个
并行执行进程的标识和所有参加计算的进程的个数*/
/* int namelen; */ /* namelen 是实际得到的机器名字的长度*/
/* char processor_name[MPI_MAX_PROCESSOR_NAME];*/ /*MPI_MAX_PROCESSOR_NAME宏:某一MPI的具体实现中允许机器名字
的最大长度,机器名放在变量processor_name中; */
int N0,N1;
int cpusp[1],lenth[1];
int len0,len1;
unsigned char inBuff[160] = "1234567890qwertyuiopasdfghjkl;zxcvbnm,./1234567890qwertyuiopasdfghjkl;zxcvbnm,./1234567890qwertyuiopasdfghjkl;zxcvbnm,./1234567890qwertyuiopasdfghjkl;zxcvbnm,.";
unsigned char *inBuff1 = new unsigned char[];
unsigned char *inBuff2 = new unsigned char[];
unsigned char *inTemp1 = new unsigned char[];
unsigned char *inTemp2 = new unsigned char[];
unsigned char *ouBuff1 = new unsigned char[];
unsigned char *ouBuff2 = new unsigned char[];
unsigned char *ouTemp1 = new unsigned char[];
unsigned char *ouTemp2 = new unsigned char[];
unsigned char ouBuff[160];
CTimer cpu;
Aes aes(16,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10\x11\x12\x13\x14\x15\x16\x17");
MPI_Status status;
MPI_Init(&argc, &argv); /* MPI程序的初始化*/
/*得到当前正在运行的进程的标识号,放在myid中*/
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
/*得到所有参加运算的进程的个数,放在numprocs中;*/
/*MPI_Comm_size(MPI_COMM_WORLD,&numprocs);*/
/* MPI_Get_processor_name得到本进程运行的机器的名称,
结果放在processor_name中,长度放在namelen中;*/
/*MPI_Get_processor_name(processor_name,&namelen);*/
if (myid == 0)
{
N0 = cpu.Cpu();
MPI_Recv(cpusp,1,MPI_INT,1,99,MPI_COMM_WORLD,&status);
N1 = cpusp[0];
len0 = 160 * N1 / ( N0 + N1 );
len1 = 160 - len0;
lenth[0] = len1;
MPI_Send(lenth,1,MPI_INT,1,99,MPI_COMM_WORLD);
unsigned char *inBuff1 = new unsigned char[len0];
unsigned char *inBuff2 = new unsigned char[len1];
unsigned char *inTemp1 = new unsigned char[25];
unsigned char *inTemp2 = new unsigned char[25];
unsigned char *ouBuff1 = new unsigned char[len0];
unsigned char *ouBuff2 = new unsigned char[len1];
unsigned char *ouTemp1 = new unsigned char[25];
unsigned char *ouTemp2 = new unsigned char[25];
cout << "进程0需要加密的字符串:";
for (int i = 0 ; i < len0 ; i ++)
{
inBuff1[i] = inBuff[i];
cout << inBuff1[i];
}
cout << endl;
cout << "进程1需要加密的字符串:";
for ( i = 0 ; i < len1 ; i ++)
{
inBuff2[i] = inBuff[i + len0];
cout << inBuff2[i];
}
cout << endl;
MPI_Send(inBuff2,len1,MPI_UNSIGNED_CHAR,1,99,MPI_COMM_WORLD);
cout << "ouTemp1 = ";
for ( i = 0 ; i < len0 / 16 + 1; i ++)
{
CString str = "",strTmp;
for (int j = 0 ; j < 16 ; j ++)
{
inTemp1[j] = inBuff1[j + i * 16];
aes.Cipher(inTemp1,ouTemp1);
ouBuff1[j + i * 16] = ouTemp1[j];
strTmp.Format("%02x",ouTemp1[j]);
}
cout << str;
}
cout << endl;
MPI_Recv(ouBuff2,len1,MPI_UNSIGNED_CHAR,1,99,MPI_COMM_WORLD,&status);
for ( i = 0 ; i < len0 ; i ++)
{
ouBuff[i] = ouBuff1[i];
}
for ( i = 0 ; i < len1 ; i ++)
{
ouBuff[i + len0] = ouBuff2[i];
}
cout << "进程0加密后的字符串:";
for ( i = 0 ; i < len0 ; i ++)
{
cout << ouBuff1[i];
}
cout << endl;
cout << "进程1加密后的字符串:";
for ( i = 0 ; i < len1 ; i ++)
{
cout << ouBuff2[i];
}
cout << endl;
cout << "ouBuff = ";
for ( i = 0 ; i < 160 ; i ++)
{
cout << ouBuff[i];
}
cout << endl;
//////////////////////////////////////////////////////////////////////////////////////////////////
//进程0解密
cout << "ouTemp1 = ";
for ( i = 0 ; i < len0 / 16 + 1; i ++)
{
for (int j = 0 ; j < 16 ; j ++)
{
inTemp1[j] = ouBuff1[j + i * 16];
aes.InvCipher(inTemp1,ouTemp1);
cout << ouTemp1[j];
inBuff1[j + i * 16] = ouTemp1[j];
}
}
cout << endl;
MPI_Recv(inBuff2,len1,MPI_UNSIGNED_CHAR,1,99,MPI_COMM_WORLD,&status);
for ( i = 0 ; i < len0 ; i ++)
{
inBuff[i] = inBuff1[i];
}
for ( i = 0 ; i < len1 ; i ++)
{
inBuff[i + len0] = inBuff2[i];
}
cout << "inBuff1 = ";
for ( i = 0 ; i < len0 ; i ++)
{
cout << inBuff1[i];
}
cout << endl;
cout << "inBuff2 = ";
for ( i = 0 ; i < len1 ; i ++)
{
cout << inBuff2[i];
}
cout << endl;
cout << "inBuff = ";
for ( i = 0 ; i < 160 ; i ++)
{
cout << inBuff[i];
}
cout << endl;
}
else if (myid == 1)
{
cpusp[0] = cpu.Cpu();
MPI_Send(cpusp,1,MPI_INT,0,99,MPI_COMM_WORLD);
MPI_Recv(lenth,1,MPI_INT,0,99,MPI_COMM_WORLD,&status);
len1 = lenth[0];
unsigned char *inBuff3 = new unsigned char[len1];
unsigned char *inTemp3 = new unsigned char[25];
unsigned char *ouBuff3 = new unsigned char[len1];
unsigned char *ouTemp3 = new unsigned char[25];
MPI_Recv(inBuff3,len1,MPI_UNSIGNED_CHAR,0,99,MPI_COMM_WORLD,&status);
for (int i = 0 ; i < len1 / 16 + 1; i ++)
{
for (int j = 0 ; j < 16 ; j ++)
{
inTemp3[j] = inBuff3[j + i * 16];
aes.Cipher(inTemp3,ouTemp3);
ouBuff3[j + i * 16] = ouTemp3[j];
}
}
MPI_Send(ouBuff3,len1,MPI_UNSIGNED_CHAR,0,99,MPI_COMM_WORLD);
//////////////////////////////////////////////////////////////////////////////////////////////////
//进程1解密
for ( i = 0 ; i < len1 / 16 + 1; i ++)
{
for (int j = 0 ; j < 16 ; j ++)
{
inTemp3[j] = ouBuff3[j + i * 16];
aes.InvCipher(inTemp3,ouTemp3);
inBuff3[j + i * 16] = ouTemp3[j];
}
}
MPI_Send(inBuff3,len1,MPI_UNSIGNED_CHAR,0,99,MPI_COMM_WORLD);
}
MPI_Finalize(); /*MPI程序的结束*/
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -