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

📄 pass.c

📁 使用标准C语言编写
💻 C
字号:
/*********************************************************** *pass.c 一个简单的文件加密程序 *Copyleft (C) 2009 gets <gets@vip.qq.com> *这是一个利用C语言异或运算实现的简单文件加密程序,适用于各种文件,可以任意 *输入密码,对已经加密文件用相同密码再次进行操作就实现了解密 *以命令行方式参数格式是:程序 [要加密的文件名] [密码] [生成的加密文件名] *无参数时将进入程序提示输入模式,按提示输入即可 *本程序可在任意平台你编译使用 *有任何问题 QQ:83185170 ***********************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>/*得到用户输入的密码字符串,返回字符串首地址*/char *input_passwd(){	char buff[256];	char tmp[256];	int count = 0;	printf("please input you password:");	while (1) {		if (fgets(buff, 256, stdin) == NULL) {			perror("stdin");			exit(1);		}		count++;		if (count == 1) {			printf("input password again:");			strcpy(tmp, buff);		} else {			if (strcmp(tmp, buff) != 0) {				printf("Two input passwords are diffent! try again:");				count = 0;				continue;			} else {				if (buff[strlen(buff) - 1] == '\n')					buff[strlen(buff) - 1] = '\0';				return strdup(buff);			}		}	}}/*这就是加密的函数了,用密码字符串按位循环和文件字符做异或运算,简单吧*/char encrypt(char ch, char *passwd){	static int i = 0;	if (passwd[i] == '\0') 		i = 0;	return ch^passwd[i++];}/*打开源文件*/	FILE *open_src_file(char *filename){	FILE *fp;	fp = fopen(filename, "r");	if (fp == NULL) {		perror(filename);		exit(1);	}		return fp;}/*打开目的文件*/FILE *open_dst_file(char *filename){	FILE *fp;	char *dstname = filename;	fp = fopen(dstname, "wb+");	if (fp == NULL) {		perror(dstname);		exit(1);	}		return fp;}/*输入要加密文件的文件名*/char *input_filename(){	char buff[256];	printf("please enter source file name:");	if (fgets(buff, 256, stdin) == NULL) {		perror("stdin");			exit(1);	}	if (buff[strlen(buff) - 1] == '\n')		buff[strlen(buff) - 1] = '\0';	return strdup(buff);}int main(int argc, char *argv[]){	char *src_name, *dst_name;	char *passwd;	FILE *src_file;	FILE *dst_file;	int tmp;	char ch;	if (argc == 4) {/*如果有正确的名令行参数,直接使用参数*/		src_name = argv[1];		passwd = argv[2];		dst_name = argv[3];	} else {/*名令行数目不对就使用提示方法等待输入*/		src_name = input_filename();		passwd = input_passwd();		dst_name = realloc(src_name, strlen(src_name) + 4);		strcat(dst_name, ".ok");	}	src_file = open_src_file(src_name); 	dst_file = open_dst_file(dst_name); 	/*循环从源文件读一个字符加密后写入目标文件*/	while ((tmp = fgetc(src_file)) != EOF) {		ch =  encrypt((char)tmp, passwd);		fputc(ch, dst_file);	}	printf("%s is creat successful!\n", dst_name);	/*结束了释放内存,关闭文件*/	if (argc != 4) {		free(passwd);		free(src_name);	}	fclose(src_file);	fclose(dst_file);	return 0;}

⌨️ 快捷键说明

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