⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.cpp

📁 使用vc编写的加密解密程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	int afterS1[4]; int afterS5[4];
	int afterS2[4]; int afterS6[4];
	int afterS3[4]; int afterS7[4];
	int afterS4[4]; int afterS8[4];
	int afterS[32];
	int temp;
	//E拓展后明文与密钥异或
	for (int i = 0; i < 48; i++)
	{
		if (afterE[i] != k[i]) afterE[i] = 1; else afterE[i] = 0;
	}
	//将明文分组
	for (i = 0; i < 6; i++)
	{
		m1[i] = afterE[i];
		m2[i] = afterE[i + 6];
		m3[i] = afterE[i + 12];
		m4[i] = afterE[i + 18];
		m5[i] = afterE[i + 24];
		m6[i] = afterE[i + 30];
		m7[i] = afterE[i + 36];
		m8[i] = afterE[i + 42];
	}

	//6组明文分别经过S盒后各自输出为afterS1...afterS8
	temp = getS(m1, 1);
	if ((temp & 0x8) != 0) afterS1[0] = 1;
	if ((temp & 0x4) != 0) afterS1[1] = 1;
	if ((temp & 0x2) != 0) afterS1[2] = 1;
	if ((temp & 0x1) != 0) afterS1[3] = 1;
	temp = getS(m2, 2);
	if ((temp & 0x8) != 0) afterS2[0] = 1;
	if ((temp & 0x4) != 0) afterS2[1] = 1;
	if ((temp & 0x2) != 0) afterS2[2] = 1;
	if ((temp & 0x1) != 0) afterS2[3] = 1;
	temp = getS(m3, 3);
	if ((temp & 0x8) != 0) afterS3[0] = 1;
	if ((temp & 0x4) != 0) afterS3[1] = 1;
	if ((temp & 0x2) != 0) afterS3[2] = 1;
	if ((temp & 0x1) != 0) afterS3[3] = 1;
	temp = getS(m4, 4);
	if ((temp & 0x8) != 0) afterS4[0] = 1;
	if ((temp & 0x4) != 0) afterS4[1] = 1;
	if ((temp & 0x2) != 0) afterS4[2] = 1;
	if ((temp & 0x1) != 0) afterS4[3] = 1;
	temp = getS(m5, 5);
	if ((temp & 0x8) != 0) afterS5[0] = 1;
	if ((temp & 0x4) != 0) afterS5[1] = 1;
	if ((temp & 0x2) != 0) afterS5[2] = 1;
	if ((temp & 0x1) != 0) afterS5[3] = 1;
	temp = getS(m6, 6);
	if ((temp & 0x8) != 0) afterS6[0] = 1;
	if ((temp & 0x4) != 0) afterS6[1] = 1;
	if ((temp & 0x2) != 0) afterS6[2] = 1;
	if ((temp & 0x1) != 0) afterS6[3] = 1;
	temp = getS(m7, 7);
	if ((temp & 0x8) != 0) afterS7[0] = 1;
	if ((temp & 0x4) != 0) afterS7[1] = 1;
	if ((temp & 0x2) != 0) afterS7[2] = 1;
	if ((temp & 0x1) != 0) afterS7[3] = 1;
	temp = getS(m8, 8);
	if ((temp & 0x8) != 0) afterS8[0] = 1;
	if ((temp & 0x4) != 0) afterS8[1] = 1;
	if ((temp & 0x2) != 0) afterS8[2] = 1;
	if ((temp & 0x1) != 0) afterS8[3] = 1;

	//合并经过S盒后的明文
	for (i = 0; i < 4; i++)
	{
		afterS[i] = afterS1[i];
		afterS[i + 4] = afterS2[i];
		afterS[i + 8] = afterS3[i];
		afterS[i + 12] = afterS4[i];
		afterS[i + 16] = afterS5[i];
		afterS[i + 20] = afterS6[i];
		afterS[i + 24] = afterS7[i];
		afterS[i + 28] = afterS8[i];
	}

	//P置换
	greturn[0] = afterS[15];
	greturn[1] = afterS[6];
	greturn[2] = afterS[19];
	greturn[3] = afterS[20];
	greturn[4] = afterS[28];
	greturn[5] = afterS[11];
	greturn[6] = afterS[27];
	greturn[7] = afterS[16];
	greturn[8] = afterS[0];
	greturn[9] = afterS[14];
	greturn[10] = afterS[22];
	greturn[11] = afterS[25];
	greturn[12] = afterS[4];
	greturn[13] = afterS[17];
	greturn[14] = afterS[30];
	greturn[15] = afterS[9];
	greturn[16] = afterS[1];
	greturn[17] = afterS[7];
	greturn[18] = afterS[23];
	greturn[19] = afterS[13];
	greturn[20] = afterS[31];
	greturn[21] = afterS[26];
	greturn[22] = afterS[2];
	greturn[23] = afterS[8];
	greturn[24] = afterS[18];
	greturn[25] = afterS[12];
	greturn[26] = afterS[29];
	greturn[27] = afterS[5];
	greturn[28] = afterS[21];
	greturn[29] = afterS[10];
	greturn[30] = afterS[3];
	greturn[31] = afterS[24];
}

//获得S盒的值
int DES::getS(int Mi[], int i)
{
	//初始化8个S盒
	int S1[4][16]; int S2[4][16];
	int S3[4][16]; int S4[4][16];
	int S5[4][16]; int S6[4][16];
	int S7[4][16]; int S8[4][16];
	int output[8];
	int j, k;
	//8个S盒
	S1[0][0] = 14;
	S1[0][1] = 4;
	S1[0][2] = 13;
	S1[0][3] = 1;
	S1[0][4] = 2;
	S1[0][5] = 15;
	S1[0][6] = 11;
	S1[0][7] = 8;
	S1[0][8] = 3;
	S1[0][9] = 10;
	S1[0][10] = 6;
	S1[0][11] = 12;
	S1[0][12] = 5;
	S1[0][13] = 9;
	S1[0][14] = 0;
	S1[0][15] = 7;
	S1[1][0] = 0;
	S1[1][1] = 15;
	S1[1][2] = 7;
	S1[1][3] = 4;
	S1[1][4] = 14;
	S1[1][5] = 2;
	S1[1][6] = 13;
	S1[1][7] = 1;
	S1[1][8] = 10;
	S1[1][9] = 6;
	S1[1][10] = 12;
	S1[1][11] = 11;
	S1[1][12] = 9;
	S1[1][13] = 5;
	S1[1][14] = 3;
	S1[1][15] = 8;
	S1[2][0] = 4;
	S1[2][1] = 1;
	S1[2][2] = 14;
	S1[2][3] = 8;
	S1[2][4] = 13;
	S1[2][5] = 6;
	S1[2][6] = 2;
	S1[2][7] = 11;
	S1[2][8] = 15;
	S1[2][9] = 12;
	S1[2][10] = 9;
	S1[2][11] = 7;
	S1[2][12] = 3;
	S1[2][13] = 10;
	S1[2][14] = 5;
	S1[2][15] = 0;
	S1[3][0] = 15;
	S1[3][1] = 12;
	S1[3][2] = 8;
	S1[3][3] = 2;
	S1[3][4] = 4;
	S1[3][5] = 9;
	S1[3][6] = 1;
	S1[3][7] = 7;
	S1[3][8] = 5;
	S1[3][9] = 11;
	S1[3][10] = 3;
	S1[3][11] = 14;
	S1[3][12] = 10;
	S1[3][13] = 0;
	S1[3][14] = 6;
	S1[3][15] = 13;

	S2[0][0] = 15;
	S2[0][1] = 1;
	S2[0][2] = 8;
	S2[0][3] = 14;
	S2[0][4] = 6;
	S2[0][5] = 11;
	S2[0][6] = 3;
	S2[0][7] = 4;
	S2[0][8] = 9;
	S2[0][9] = 7;
	S2[0][10] = 2;
	S2[0][11] = 13;
	S2[0][12] = 12;
	S2[0][13] = 0;
	S2[0][14] = 5;
	S2[0][15] = 10;
	S2[1][0] = 3;
	S2[1][1] = 13;
	S2[1][2] = 4;
	S2[1][3] = 7;
	S2[1][4] = 15;
	S2[1][5] = 2;
	S2[1][6] = 8;
	S2[1][7] = 14;
	S2[1][8] = 12;
	S2[1][9] = 0;
	S2[1][10] = 1;
	S2[1][11] = 10;
	S2[1][12] = 6;
	S2[1][13] = 9;
	S2[1][14] = 11;
	S2[1][15] = 5;
	S2[2][0] = 0;
	S2[2][1] = 14;
	S2[2][2] = 7;
	S2[2][3] = 11;
	S2[2][4] = 10;
	S2[2][5] = 4;
	S2[2][6] = 13;
	S2[2][7] = 1;
	S2[2][8] = 5;
	S2[2][9] = 8;
	S2[2][10] = 12;
	S2[2][11] = 6;
	S2[2][12] = 9;
	S2[2][13] = 3;
	S2[2][14] = 2;
	S2[2][15] = 15;
	S2[3][0] = 13;
	S2[3][1] = 8;
	S2[3][2] = 10;
	S2[3][3] = 1;
	S2[3][4] = 3;
	S2[3][5] = 15;
	S2[3][6] = 4;
	S2[3][7] = 2;
	S2[3][8] = 11;
	S2[3][9] = 6;
	S2[3][10] = 7;
	S2[3][11] = 12;
	S2[3][12] = 0;
	S2[3][13] = 5;
	S2[3][14] = 14;
	S2[3][15] = 9;

	S3[0][0] = 10;
	S3[0][1] = 0;
	S3[0][2] = 9;
	S3[0][3] = 14;
	S3[0][4] = 6;
	S3[0][5] = 3;
	S3[0][6] = 15;
	S3[0][7] = 5;
	S3[0][8] = 1;
	S3[0][9] = 13;
	S3[0][10] = 12;
	S3[0][11] = 7;
	S3[0][12] = 11;
	S3[0][13] = 4;
	S3[0][14] = 2;
	S3[0][15] = 8;
	S3[1][0] = 13;
	S3[1][1] = 7;
	S3[1][2] = 0;
	S3[1][3] = 9;
	S3[1][4] = 3;
	S3[1][5] = 4;
	S3[1][6] = 6;
	S3[1][7] = 10;
	S3[1][8] = 2;
	S3[1][9] = 8;
	S3[1][10] = 5;
	S3[1][11] = 14;
	S3[1][12] = 12;
	S3[1][13] = 11;
	S3[1][14] = 15;
	S3[1][15] = 1;
	S3[2][0] = 13;
	S3[2][1] = 6;
	S3[2][2] = 4;
	S3[2][3] = 9;
	S3[2][4] = 8;
	S3[2][5] = 15;
	S3[2][6] = 3;
	S3[2][7] = 0;
	S3[2][8] = 11;
	S3[2][9] = 1;
	S3[2][10] = 2;
	S3[2][11] = 12;
	S3[2][12] = 5;
	S3[2][13] = 10;
	S3[2][14] = 14;
	S3[2][15] = 7;
	S3[3][0] = 1;
	S3[3][1] = 10;
	S3[3][2] = 13;
	S3[3][3] = 0;
	S3[3][4] = 6;
	S3[3][5] = 9;
	S3[3][6] = 8;
	S3[3][7] = 7;
	S3[3][8] = 4;
	S3[3][9] = 15;
	S3[3][10] = 14;
	S3[3][11] = 3;
	S3[3][12] = 11;
	S3[3][13] = 5;
	S3[3][14] = 2;
	S3[3][15] = 12;

	S4[0][0] = 7;
	S4[0][1] = 13;
	S4[0][2] = 14;
	S4[0][3] = 3;
	S4[0][4] = 0;
	S4[0][5] = 6;
	S4[0][6] = 9;
	S4[0][7] = 10;
	S4[0][8] = 1;
	S4[0][9] = 2;
	S4[0][10] = 8;
	S4[0][11] = 5;
	S4[0][12] = 11;
	S4[0][13] = 12;
	S4[0][14] = 4;
	S4[0][15] = 15;
	S4[1][0] = 13;
	S4[1][1] = 8;
	S4[1][2] = 11;
	S4[1][3] = 5;
	S4[1][4] = 6;
	S4[1][5] = 15;
	S4[1][6] = 0;
	S4[1][7] = 3;
	S4[1][8] = 4;
	S4[1][9] = 7;
	S4[1][10] = 2;
	S4[1][11] = 12;
	S4[1][12] = 1;
	S4[1][13] = 10;
	S4[1][14] = 14;
	S4[1][15] = 9;
	S4[2][0] = 10;
	S4[2][1] = 6;
	S4[2][2] = 9;
	S4[2][3] = 0;
	S4[2][4] = 12;
	S4[2][5] = 11;
	S4[2][6] = 7;
	S4[2][7] = 13;
	S4[2][8] = 15;
	S4[2][9] = 1;
	S4[2][10] = 3;
	S4[2][11] = 14;
	S4[2][12] = 5;
	S4[2][13] = 2;
	S4[2][14] = 8;
	S4[2][15] = 4;
	S4[3][0] = 3;
	S4[3][1] = 15;
	S4[3][2] = 0;
	S4[3][3] = 6;
	S4[3][4] = 10;
	S4[3][5] = 1;
	S4[3][6] = 13;
	S4[3][7] = 8;
	S4[3][8] = 9;
	S4[3][9] = 4;
	S4[3][10] = 5;
	S4[3][11] = 11;
	S4[3][12] = 12;
	S4[3][13] = 7;
	S4[3][14] = 2;
	S4[3][15] = 14;

	S5[0][0] = 2;
	S5[0][1] = 12;
	S5[0][2] = 4;
	S5[0][3] = 1;
	S5[0][4] = 7;
	S5[0][5] = 10;
	S5[0][6] = 11;
	S5[0][7] = 6;
	S5[0][8] = 8;
	S5[0][9] = 5;
	S5[0][10] = 3;
	S5[0][11] = 15;
	S5[0][12] = 13;
	S5[0][13] = 0;
	S5[0][14] = 14;
	S5[0][15] = 9;
	S5[1][0] = 14;
	S5[1][1] = 11;
	S5[1][2] = 2;
	S5[1][3] = 12;
	S5[1][4] = 4;
	S5[1][5] = 7;
	S5[1][6] = 13;
	S5[1][7] = 1;
	S5[1][8] = 5;
	S5[1][9] = 0;
	S5[1][10] = 15;
	S5[1][11] = 10;
	S5[1][12] = 3;
	S5[1][13] = 9;
	S5[1][14] = 8;
	S5[1][15] = 6;
	S5[2][0] = 4;
	S5[2][1] = 2;
	S5[2][2] = 1;
	S5[2][3] = 11;
	S5[2][4] = 10;
	S5[2][5] = 13;
	S5[2][6] = 7;
	S5[2][7] = 8;
	S5[2][8] = 15;
	S5[2][9] = 9;
	S5[2][10] = 12;
	S5[2][11] = 5;
	S5[2][12] = 6;
	S5[2][13] = 3;
	S5[2][14] = 0;
	S5[2][15] = 14;
	S5[3][0] = 11;
	S5[3][1] = 8;
	S5[3][2] = 12;
	S5[3][3] = 7;
	S5[3][4] = 1;
	S5[3][5] = 14;
	S5[3][6] = 2;
	S5[3][7] = 13;
	S5[3][8] = 6;
	S5[3][9] = 15;
	S5[3][10] = 0;
	S5[3][11] = 9;
	S5[3][12] = 10;
	S5[3][13] = 4;
	S5[3][14] = 5;
	S5[3][15] = 3;

	S6[0][0] = 12;
	S6[0][1] = 1;
	S6[0][2] = 10;
	S6[0][3] = 15;
	S6[0][4] = 9;
	S6[0][5] = 2;
	S6[0][6] = 6;
	S6[0][7] = 8;
	S6[0][8] = 0;
	S6[0][9] = 13;
	S6[0][10] = 3;
	S6[0][11] = 4;
	S6[0][12] = 14;
	S6[0][13] = 7;
	S6[0][14] = 5;
	S6[0][15] = 11;
	S6[1][0] = 10;
	S6[1][1] = 15;
	S6[1][2] = 4;
	S6[1][3] = 2;
	S6[1][4] = 7;
	S6[1][5] = 12;
	S6[1][6] = 9;
	S6[1][7] = 5;
	S6[1][8] = 6;
	S6[1][9] = 1;
	S6[1][10] = 13;
	S6[1][11] = 14;
	S6[1][12] = 0;
	S6[1][13] = 11;
	S6[1][14] = 3;
	S6[1][15] = 8;
	S6[2][0] = 9;
	S6[2][1] = 14;
	S6[2][2] = 15;
	S6[2][3] = 5;
	S6[2][4] = 2;
	S6[2][5] = 8;
	S6[2][6] = 12;
	S6[2][7] = 3;
	S6[2][8] = 7;
	S6[2][9] = 0;
	S6[2][10] = 4;
	S6[2][11] = 10;
	S6[2][12] = 1;
	S6[2][13] = 13;
	S6[2][14] = 11;
	S6[2][15] = 6;
	S6[3][0] = 4;
	S6[3][1] = 3;
	S6[3][2] = 2;
	S6[3][3] = 12;
	S6[3][4] = 9;
	S6[3][5] = 5;
	S6[3][6] = 15;
	S6[3][7] = 10;
	S6[3][8] = 11;
	S6[3][9] = 14;
	S6[3][10] = 1;
	S6[3][11] = 7;
	S6[3][12] = 6;
	S6[3][13] = 0;
	S6[3][14] = 8;
	S6[3][15] = 13;

	S7[0][0] = 4;
	S7[0][1] = 11;
	S7[0][2] = 2;
	S7[0][3] = 14;
	S7[0][4] = 15;
	S7[0][5] = 0;
	S7[0][6] = 8;
	S7[0][7] = 13;
	S7[0][8] = 3;
	S7[0][9] = 12;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -