简单的加密解密——逐字节加法减法C语言实现
对称加密体制,由用户指定自己的密钥key
加密函数:M = P + key
解密函数:P = M - key
因此加密函数和解密函数互为逆函数
只要将明文文件中的一个字节代入加密函数中进行运算,得到的结果即为一个字节的密文数据
同理将密文文件中的一个字节代入解密函数中进行运算,得到的结果即为一个字节的明文数据
#include <cstdio> #include <cstdlib> int openSrcFile(char ** buffer) //读取文件 { FILE * myfile_src; char filename[20]; long file_size; printf("Please input the path and filename of the file you want to process\n"); scanf("%s", filename); if(!(myfile_src = fopen(filename, "rb"))) { printf("ERROR!"); } fseek(myfile_src, 0, SEEK_END); file_size = ftell(myfile_src); fseek(myfile_src, 0, SEEK_SET); *buffer = (char *)malloc(file_size); fread(*buffer, 1, file_size, myfile_src); fclose(myfile_src); return file_size; } void encryption(char buffer[], long file_size, int key) //加密函数 { long i; for(i = 0; i < file_size; i++) { buffer[i] += key; //M = P + key } } void decryption(char buffer[], long file_size, int key) //解密函数 { long i; for(i = 0; i < file_size; i++) { buffer[i] -= key; //P = M - key } } void saveDstFile(char * buffer, long file_size) //保存文件 { FILE * myfile_dst; char filename[20]; printf("Please input the path and filename of the file you have processed\n"); scanf("%s", filename); if(!(myfile_dst = fopen(filename, "wb"))) { printf("ERROR"); } fwrite(buffer, 1, file_size, myfile_dst); printf("OK"); fclose(myfile_dst); } void Process(int a) { char * buffer; int key; long file_size; file_size = openSrcFile(&buffer); printf("Please input the key (a integer) for encryption of decryption\n"); scanf("%d", &key); if(a == 0) { encryption(buffer, file_size, key); } else { decryption(buffer, file_size, key); } saveDstFile(buffer, file_size); } void menu(void) { printf("*************************************************************\n"); printf("===========A SIMPLE ENCRYPTION / DECRYPTION SYSTEM===========\n"); printf("ENCRYPTION press 'E' DECRYPTION press 'D' QUIT press 'Q'\n"); printf("*************************************************************\n"); } int main() { char flag; menu(); flag = getchar(); getchar(); while(flag != 'Q') { switch(flag) { case 'E' : Process(0);break; case 'D' : Process(1);break; default : printf("Input Error!\n");break; } flag = getchar(); getchar(); } return 0; }
——现在的努力是为了小时候吹过的牛B!!