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

📄 main.cpp

📁 用C++开发的一个简单的DES加密解密程序
💻 CPP
字号:
#include "iostream"
#include "stdlib.h"
#include "string"
using namespace std;

#include "DES.h"

char* Convert2Bin(char[]);
char* Binary(char);
void InsertInArray(char*,char[]);
char* Convert2Hex(char*);
char Hexa(char,char,char,char);

void main()
{
	char ed;
	char *data = new char[DATA_LENGTH];
	char *key = new char[KEY_TOTAL_LENGTH];
	data[0] = '\0';
	key[0] = '\0';

	char *tData = new char[64];
	char *tKey = new char[64];

	cout << endl << "Encryption/Decryption? E/D: ";
	cin >> ed;

	if (tolower(ed) == 'e')
	{
		//perform encryption
		cout << endl << "Starting Encryption..." << endl;

		cout << endl << "Enter Data to encrypt: ";
		cin >> tData;
		cout << endl << "Enter Encryption Key: ";
		cin >> tKey;

#ifdef SDES
		strcpy(data,tData);
		strcpy(key,tKey);
#else
		strcpy(data,Convert2Bin(tData));
		strcpy(key,Convert2Bin(tKey));
#endif
		CDES *des = new CDES(data,key);
		char* cipher = des->Encrypt();

#ifdef DES
		cipher = Convert2Hex(cipher);
#endif

		cout << endl << "Encrypted Text: " << cipher << endl;
	}
	else if (tolower(ed) == 'd')
	{
		//perform decryption
		cout << endl << "Starting Decryption..." << endl;

		cout << endl << "Enter Data to Decrypt: ";
		cin >> tData;
		cout << endl << "Enter Decryption Key: ";
		cin >> tKey;

#ifdef SDES
		strcpy(data,tData);
		strcpy(key,tKey);
#else
		strcpy(data,Convert2Bin(tData));
		strcpy(key,Convert2Bin(tKey));
#endif
		CDES *des = new CDES(data,key);
		char *plain = des->Decrypt();

#ifdef DES
		plain = Convert2Hex(plain);
#endif

		cout << endl << "Decrypted Text: " << plain << endl;
	}
	else
	{
		//invalid choice... neither e nor d
		cout << endl << "We support only e and d..." << endl;
	}
}

char* Convert2Hex(char* out)
{
	int i,j;
	char hexchar;
	char *put = new char[DATA_LENGTH/4];

	for (i = 0,j = 0 ; i < DATA_LENGTH ; j++, i += 4)
	{
		hexchar = Hexa(out[i],out[i+1],out[i+2],out[i+3]);
		put[j] = hexchar;
	}

	put[j] = '\0';

	return put;
}

char Hexa(char a, char b, char c, char d)
{
	if		(a == '0' && b == '0' && c == '0' && d == '0')
		return '0';
	else if (a == '0' && b == '0' && c == '0' && d == '1')
		return '1';
	else if (a == '0' && b == '0' && c == '1' && d == '0')
		return '2';
	else if (a == '0' && b == '0' && c == '1' && d == '1')
		return '3';
	else if (a == '0' && b == '1' && c == '0' && d == '0')
		return '4';
	else if (a == '0' && b == '1' && c == '0' && d == '1')
		return '5';
	else if (a == '0' && b == '1' && c == '1' && d == '0')
		return '6';
	else if (a == '0' && b == '1' && c == '1' && d == '1')
		return '7';
	else if (a == '1' && b == '0' && c == '0' && d == '0')
		return '8';
	else if (a == '1' && b == '0' && c == '0' && d == '1')
		return '9';
	else if (a == '1' && b == '0' && c == '1' && d == '0')
		return 'A';
	else if (a == '1' && b == '0' && c == '1' && d == '1')
		return 'B';
	else if (a == '1' && b == '1' && c == '0' && d == '0')
		return 'C';
	else if (a == '1' && b == '1' && c == '0' && d == '1')
		return 'D';
	else if (a == '1' && b == '1' && c == '1' && d == '0')
		return 'E';
	else
		return 'F';
}

char* Convert2Bin(char data[])
{
	unsigned int i;
	char *bins;
	char *array = new char[DATA_LENGTH];
	array[0] = '\0';

//	cout << endl << "Data to Convert : " << data;

	for (i = 0 ; i < strlen(data) ; i++)
	{
		bins = Binary(data[i]);
//		cout << endl << bins;
		InsertInArray(bins,array);
//		cout << endl << "Array : " << array;
	}

	return array;
}

void InsertInArray(char* b,char* arr)
{
	int i,j;

	for (i = strlen(arr),j = 0 ; j < 4 ; i++,j++)
	{
		arr[i] = b[j];
	}

	arr[i] = '\0';
}

char* Binary(char c)
{
	switch(c)
	{
	case '0':
		return "0000";
	case '1':
		return "0001";
	case '2':
		return "0010";
	case '3':
		return "0011";
	case '4':
		return "0100";
	case '5':
		return "0101";
	case '6':
		return "0110";
	case '7':
		return "0111";
	case '8':
		return "1000";
	case '9':
		return "1001";
	case 'A':
		return "1010";
	case 'B':
		return "1011";
	case 'C':
		return "1100";
	case 'D':
		return "1101";
	case 'E':
		return "1110";
	case 'F':
		return "1111";
	default:
		return "";
	}
}

⌨️ 快捷键说明

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