des.c

来自「windows下的DES文件加解密程序」· C语言 代码 · 共 131 行

C
131
字号
#include <stdio.h>
#include "scert.h"
#include <string.h>

int main(int argc,char *argv[],char *envp[])
{
	unsigned char output[4096];//输出
	unsigned char input[4096];//输入
	int i[4],ret=0;
	int j=0,count=0,filelen=0,tmplen=0;
	FILE *fp,*tmpfp;

	memset(output,0,4096);
	memset(input,0,4096);
	
	//判断是加密还是解密--加密
	if(strcmp(argv[1],"-e")==0)
	{
		//读取要加密的文件
		if((fp=fopen(argv[2],"rb"))==NULL){
			printf("Open InputFile Error!\n");
			return -1;
		}
		//写加密后的文件
		if((tmpfp=fopen(argv[3],"wb"))==NULL){
			printf("Creat DecFile Error!\n");
			return -1;
		}
		//计算文件大小
		fseek(fp,0L,SEEK_END);
		filelen=ftell(fp);
		fseek(fp,0L,SEEK_SET);
		
		//求除数为了共加密多少次
		count=filelen/1024;
		//求余数为了获取剩余没有加密的数据大小
		tmplen=filelen%1024;
		
		//循环加密每次加密1024bit
		for(j=0;j<count;j++)
		{
			memset(input,0,4096);
			memset(output,0,4096);
			//读取文件1024bit,文件指针后移
			fread(input,1,1024,fp);
			//加密后输出数据大小
			i[0]=1024;
			//加密
			ret=Crypt_Dec_Data_Des(input,1024,output,i,"12345678901234567890123456789012");
			//向输出文件写数据
			if(ret!=0)
			{
				printf("Data Dec Error!\n");
				return ret;
			}
			else
				fwrite(output,1,1024,tmpfp);
		}
		//加密剩余数据
		if(tmplen!=0)
		{
			memset(input,0,4096);
			memset(output,0,4096);
			i[0]=tmplen;
			fread(input,1,tmplen,fp);
			ret=Crypt_Dec_Data_Des(input,tmplen,output,i,"12345678901234567890123456789012");
			if(ret!=0){
				printf("Data Dec Error!\n");
				return ret;
			}
			else
				fwrite(output,1,tmplen,tmpfp);
		}
		fclose(fp);
		fclose(tmpfp);
	}
	//判断是加密还是解密--解密
	if(strcmp(argv[1],"-d")==0)
	{
		//打开要解密的文件
		if((fp=fopen(argv[2],"rb"))==NULL){
			printf("Open InFile Error!\n");
			return -1;
		}
		//创建解密文件
		if((tmpfp=fopen(argv[3],"wb"))==NULL){
			printf("Creat EncFile Error!\n");
			return -1;
		}
		//计算加密文件大小
		fseek(fp,0L,SEEK_END);
		filelen=ftell(fp);
		fseek(fp,0L,SEEK_SET);
		//同上
		count=filelen/1024;
		tmplen=filelen%1024;
		for(j=0;j<count;j++){
			memset(input,0,4096);
			memset(output,0,4096);
			fread(input,1,1024,fp);
		i[0]=1024;
		ret=Crypt_Enc_Data_Des(input,1024,output,i,"12345678901234567890123456789012");
		if(ret!=0)
		{
			printf("Data Enc Error!\n");
			return ret;
		}
		else
			fwrite(output,1,1024,tmpfp);
		}
		//同上
		if(tmplen!=0)
		{
			memset(input,0,4096);
			memset(output,0,4096);
			i[0]=tmplen;
			fread(input,1,tmplen,fp);
			ret=Crypt_Enc_Data_Des(input,tmplen,output,i,"");
			if(ret!=0)
			{
				printf("Data Enc Error!\n");
				return ret;
			}
			else
				fwrite(output,1,tmplen,tmpfp);
		}
		fclose(fp);
		fclose(tmpfp);
	}
	return 0;
}

⌨️ 快捷键说明

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