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

📄 desmain.c

📁 DES加密解密源代码
💻 C
字号:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#include "des.h" 

unsigned char *in_ptr;
unsigned char in[NUM_OF_BLOCKS*BLOCK_SIZE];

extern unsigned char encbuf[]; 
extern unsigned char decbuf[];
extern des_cblock enc_key1;
extern des_cblock dec_key1;

char en_de = 0;

void main(void)
{

	FILE* fpOriginalFile, *fpEncryptFile, *fpDecryptFile;
	char OriginalFileName[256], EncryptFileName[256], DecryptFileName[256];
	char inkey[64];
	int i, cnt;

	in_ptr = in;

	printf("Select the function.\n");
	printf("    0 - Encrypt\n");
	printf("    1 - Decrypt\n");
	printf("Your selection: ");
	if(getchar()=='0'){ // 加密
		en_de=0;
		printf("Encrypt key: ");
		scanf("%s", inkey);
		for(i=0;i<8;i++){
			((char*)enc_key1)[i]=inkey[i];
			if(inkey[i]==0)
				break;
		}
		for(;i<8;i++){
			((char*)enc_key1)[i]=0;
		}

		set_key(); // 设置密钥并检查密钥是否弱口令

		do{ // 获取原始文件名
			printf("Original file name: ");
			scanf("%s", OriginalFileName);
		}while(!OriginalFileName[0]);
		fpOriginalFile = fopen(OriginalFileName, "rb");
		if(fpOriginalFile == NULL){
			printf("Cannot open the Original file.\npress any key to continue...\n");
			getch();
			exit(-1);
		}

		for(i=0;i<256;i++){ // 获取加密文件名
			if(OriginalFileName[i]!=0){
				EncryptFileName[i]=OriginalFileName[i];
			}
			else{
				EncryptFileName[i]='.';
				EncryptFileName[i+1]='d';
				EncryptFileName[i+2]='e';
				EncryptFileName[i+3]='s';
				EncryptFileName[i+4]=0;
			break;
			}
		}
/*		do{ // 获取加密文件名
			printf("Encrypt file name: ");
			scanf("%s", EncryptFileName);
		}while(!EncryptFileName[0]);
*/		fpEncryptFile = fopen(EncryptFileName, "wb");
		if(fpEncryptFile == NULL){
			printf("Cannot open the Encrypt file.\npress any key to continue...\n");
			getch();
			exit(-2);
		}

		while(1){
			cnt=fread((void*)in, sizeof(char), BLOCK_SIZE*NUM_OF_BLOCKS, fpOriginalFile);
			if(cnt<BLOCK_SIZE*NUM_OF_BLOCKS){
				for(i=0;i<cnt;i++)
					in[i]^=ivec[i];
				
				fwrite((void*)in, sizeof(char), cnt, fpEncryptFile);
				break;
			}

			encrypt(); // 加密
			fwrite((void*)encbuf, sizeof(char), cnt, fpEncryptFile);
			
		}

		fclose(fpOriginalFile);
		fclose(fpEncryptFile);
	}
	else{  // 解密
		en_de=1;
		printf("Decrypt key: ");
		scanf("%s", inkey);
		for(i=0;i<8;i++){
			((char*)dec_key1)[i]=inkey[i];
			if(inkey[i]==0)
				break;
		}
		for(;i<8;i++){
			((char*)dec_key1)[i]=0;
		}

		set_key(); // 设置密钥并检查密钥是否弱口令

		do{ // 获取加密文件名
			printf("Encrypt file name: ");
			scanf("%s", EncryptFileName);
		}while(!EncryptFileName[0]);

		DecryptFileName[0]='_';
		for(i=0;i<256;i++){ // 获取解密文件名
			if(EncryptFileName[i]!=0){
				DecryptFileName[i+1]=EncryptFileName[i];
			}
			else{
				EncryptFileName[i]='.';
				EncryptFileName[i+1]='d';
				EncryptFileName[i+2]='e';
				EncryptFileName[i+3]='s';
				EncryptFileName[i+4]=0;

				DecryptFileName[i+1]=0;
			break;
			}
		}

		fpEncryptFile = fopen(EncryptFileName, "rb");
		if(fpEncryptFile == NULL){
			printf("Cannot open the Encrypt file.\npress any key to continue...\n");
			getch();
			exit(-2);
		}

//		do{ // 获取解密文件名
//			printf("Decrypt file name: ");
//			scanf("%s", DecryptFileName);
//		}while(!DecryptFileName[0]);
		fpDecryptFile = fopen(DecryptFileName, "wb");
		if(fpDecryptFile == NULL){
			printf("Cannot open the Decrypt file.\npress any key to continue...\n");
			getch();
			exit(-3);
		}

		while(1){
			cnt=fread((void*)in, sizeof(char), BLOCK_SIZE*NUM_OF_BLOCKS, fpEncryptFile);
			if(cnt<BLOCK_SIZE*NUM_OF_BLOCKS){
				for(i=0;i<cnt;i++)
					in[i]^=ivec[i];
				
				fwrite((void*)in, sizeof(char), cnt, fpDecryptFile);
				break;
			}

			decrypt(); // 解密
			fwrite((void*)decbuf, sizeof(char), cnt, fpDecryptFile);
		}

		fclose(fpEncryptFile);
		fclose(fpDecryptFile);
	}

	printf("Please press any key to continue...\n");
	getch();

}







⌨️ 快捷键说明

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