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

📄 desprocess.h

📁 rsa加密算法的vc实现
💻 H
字号:
#if !defined DESPROCESS_H
#define DESPROCESS_H

#if _MSC_VER > 1000
#pragma once
#endif//_MSC > 1000

#include<iostream>
#include<string>
#include<iomanip>
#include<cstdio>
using namespace std;

const static int maxlen = 60000;

//IP
	const static int ip[64] = {
		58, 50, 42, 34, 26, 18, 10, 2,
		60, 52, 44, 36, 28, 20, 12, 4,
		62, 54, 46, 38, 30, 22, 14, 6,
		64, 56, 48, 40, 32, 24, 16, 8,
		57, 49, 41, 33, 25, 17, 9, 1,
		59, 51, 43, 35, 27, 19, 11, 3,
		61, 53, 45, 37, 29, 21, 13, 5,
		63, 55, 47, 39, 31, 23, 15, 7};

//the reverse of IP
	const static int fp[64] = {
		40, 8, 48, 16, 56, 24, 64, 32,
		39, 7, 47, 15, 55, 23, 63, 31,
		38, 6, 46, 14, 54, 22, 62, 30,
		37, 5, 45, 13, 53, 21, 61, 29,
		36, 4, 44, 12, 52, 20, 60, 28,
		35, 3, 43, 11, 51, 19, 59, 27,
		34, 2, 42, 10, 50, 18, 58, 26,
		33, 1, 41,  9, 49, 17, 57, 25};

//E matrix
	const static int e[48] = {
		32,  1,  2,  3,  4,  5,
		4,   5,  6,  7,  8,  9,
		8,   9, 10, 11, 12, 13,
		12, 13, 14, 15, 16, 17,
		16, 17, 18, 19, 20, 21,
		20, 21, 22, 23, 24, 25,
		24, 25, 26, 27, 28, 29,
		28, 29, 30, 31, 32,  1};

//S box
	const static int sbox[8][64] = {
		//S1
		14,  4, 13,  1,  2, 15, 11,  8, 
		 3, 10,  6, 12,  5,  9,  0,  7,
		 0, 15,  7,  4, 14,  2, 13,  1, 
		10,  6, 12, 11,  9,  5,  3,  8, 
		 4,  1, 14,  8, 13,  6,  2, 11, 
		15, 12,  9,  7,  3, 10,  5,  0, 
		15, 12,  8,  2,  4,  9,  1,  7,
		 5, 11,  3, 14, 10,  0,  6, 13, 

		//S2
		15,  1,  8, 14,  6, 11,  3,  4, 
		 9,  7,  2, 13, 12,  0,  5, 10, 
		 3, 13,  4,  7, 15,  2,  8, 14, 
		12,  0,  1, 10,  6,  9, 11,  5,
		 0, 14,  7, 11, 10,  4, 13,  1,
		 5,  8, 12,  6,  9,  3,  2, 15, 
		13,  8, 10,  1,  3, 15,  4,  2, 
		11,  6,  7, 12,  0,  5, 14,  9, 

		//S3
		10,  0,  9, 14,  6,  3, 15,  5, 
		 1, 13, 12,  7, 11,  4,  2,  8, 
		13,  7,  0,  9,  3,  4,  6, 10, 
		 2,  8,  5, 14, 12, 11, 15,  1, 
		13,  6,  4,  9,  8, 15,  3,  0, 
		11,  1,  2, 12,  5, 10, 14,  7, 
		 1, 10, 13,  0,  6,  9,  8,  7, 
		 4, 15, 14,  3, 11,  5,  2, 12, 

		//S4
		 7, 13, 14,  3,  0,  6,  9, 10, 
		 1,  2,  8,  5, 11, 12,  4, 15, 
		13,  8, 11,  5,  6, 15,  0,  3, 
		 4,  7,  2, 12,  1, 10, 14,  9,
		10,  6,  9,  0, 12, 11,  7, 13, 
		15,  1,  3, 14,  5,  2,  8,  4, 
		 3, 15,  0,  6, 10,  1, 13,  8, 
		 9,  4,  5, 11, 12,  7,  2, 14, 

		//S5
		 2, 12,  4,  1,  7, 10, 11,  6, 
		 8,  5,  3, 15, 13,  0, 14,  9, 
		14, 11,  2, 12,  4,  7, 13,  1, 
		 5,  0, 15, 10,  3,  9,  8,  6, 
		 4,  2,  1, 11, 10, 13,  7,  8, 
		15,  9, 12,  5,  6,  3,  0, 14, 
		11,  8, 12,  7,  1, 14,  2, 13, 
		 6, 15,  0,  9, 10,  4,  5,  3, 

		//S6
		12,  1, 10, 15,  9,  2,  6,  8, 
		 0, 13,  3,  4, 14,  7,  5, 11, 
		10, 15,  4,  2,  7, 12,  9,  5, 
		 6,  1, 13, 14,  0, 11,  3,  8, 
		 9, 14, 15,  5,  2,  8, 12,  3, 
		 7,  0,  4, 10,  1, 13, 11,  6, 
		 4,  3,  2, 12,  9,  5, 15, 10, 
		11, 14,  1,  7,  6,  0,  8, 13, 

		//S7
		 4, 11,  2, 14, 15,  0,  8, 13, 
		 3, 12,  9,  7,  5, 10,  6,  1, 
		13,  0, 11,  7,  4,  9,  1, 10, 
		14,  3,  5, 12,  2, 15,  8,  6, 
		 1,  4, 11, 13, 12,  3,  7, 14, 
		10, 15,  6,  8,  0,  5,  9,  2, 
		 6, 11, 13,  8,  1,  4, 10,  7, 
		 9,  5,  0, 15, 14,  2,  3, 12, 

		//S8
		13,  2,  8,  4,  6, 15, 11,  1, 
		10,  9,  3, 14,  5,  0, 12,  7, 
		 1, 15, 13,  8, 10,  3,  7,  4, 
		12,  5,  6, 11,  0, 14,  9,  2, 
		 7, 11,  4,  1,  9, 12, 14,  2, 
		 0,  6, 10, 13, 15,  3,  5,  8, 
		 2,  1, 14,  7,  4, 10,  8, 13, 
		15, 12,  9,  0,  3,  5,  6, 11
	};

	//P
	const static int p[32] = {
		16,  7, 20, 21,
		29, 12, 28, 17,
		 1, 15, 23, 26,
		 5, 18, 31, 10,
		 2,  8, 24, 14,
		32, 27,  3,  9,
		19, 13, 30,  6,
		22, 11,  4, 25,
	};

	//PC--1
	const static int pc1[56] = {
		57, 49, 41, 33, 25, 17,  9, 
		 1, 58, 50, 42, 34, 26, 18, 
		10,  2, 59, 51, 43, 35, 27, 
		19, 11,  3, 60, 52, 44, 36, 
		63, 55, 47, 39, 31, 23, 15, 
		 7, 62, 54, 46, 38, 30, 22, 
		14,  6, 61, 53, 45, 37, 29, 
		21, 13,  5, 28, 20, 12,  4
	};

	//the digit every circle should left move
	const static int ls[16] = {
		1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};

//PC--2
	const static int pc2[48] = {
		14, 17, 11, 24,  1,  5, 
		 3, 28, 15,  6, 21, 10, 
		23, 19, 12,  4, 26,  8, 
		16,  7, 27, 20, 13,  2, 
		41, 52, 31, 37, 47, 55, 
		30, 40, 51, 45, 33, 48, 
		44, 49, 39, 56, 34, 53, 
		46, 42, 50, 36, 29, 32
	};
		
class DESProcess
{
public:
	DESProcess();
	~DESProcess();
	void setBits(const unsigned int& r, const unsigned int& l);
	void setKey(const unsigned int& r, const unsigned int& l);

//the desEnCode() function read prlaintext in the form 
//of charactors from the M file and write the cryphcoraphy in the form of 
//integer to the C File.   
//the desDeCode() is just reverse.
	void desEnCode();
	void desDeCode();
	void outputBits(unsigned int& r, unsigned int& l);
private:
	char mch[8];
	bool bits[64];
	bool constkey[64];
	bool key[64];
	bool tkey[48];
	unsigned int right, left;

	void desCoding(bool enCoding);

	void intToBit();
	void bitToInt();
	void ipBits();
	void reverseBits();
	void DiffBits();
	void fpBits();

	void pc_1Key();
	void lsKey(int length);
	void BitsToKey();
	void pc_2Key();
	void sBoxKey();
	void pKey();
};
#include"DESProcess.cpp"

#endif

⌨️ 快捷键说明

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