📄 pass.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 + -