按照密码加密文件

来源:互联网 发布:access数据库制作软件 编辑:程序博客网 时间:2024/06/04 00:48

头文件

#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//字符串按照密码加密char *stringJiami(char *password, char *string);//字符串加密char *stringJiemi(char *password, char *string);//字符串解密void fileJiami(char *path, char *pathjia, char *password);void fileJiami(char *pathjia, char *pathjie, char *password);

源文件

#include"密码加密.h"int getfilesize(char *path){FILE *pf = fopen(path, "r");if (pf == NULL){return -1;}else{fseek(pf, 0, SEEK_END);//把指针移动到文件末尾int length = ftell(pf);//指针到开头的长度return length;}}char *stringJiami(char *password, char *string){int passLength = strlen(password);//密码长度int stringLength = strlen(string);//字符串长度if (stringLength%passLength == 0){int ci = stringLength / passLength;//要循环的次数for (int i = 0; i < ci; i++)//循环次{for (int j = 0; j < passLength; j++)//循环密码{string[passLength*i + j] ^= password[j];//异或加密}}}else{int ci = stringLength / passLength;//要循环的次数for (int i = 0; i < ci; i++){for (int j = 0; j < passLength; j++){string[passLength*i + j] ^= password[j];}}int lastLength = stringLength%passLength;//剩下的长度for (int i = 0; i < lastLength; i++){string[passLength*ci + i] ^= password[i];//剩下的字节进行加密}}return string;}char *stringJiemi(char *password, char *jiastring){int passLength = strlen(password);int stringLength = strlen(jiastring);if (stringLength%passLength == 0){int ci = stringLength / passLength;for (int i = 0; i < ci; i++){for (int j = 0; j < passLength; j++){jiastring[passLength*i + j] ^= password[j];}}}else{int ci = stringLength / passLength;for (int i = 0; i < ci; i++){for (int j = 0; j < passLength; j++){jiastring[passLength*i + j] ^= password[j];}}int lastLength = stringLength%passLength;for (int i = 0; i < lastLength; i++){jiastring[passLength*ci + i] ^= password[i];}}return jiastring;}void fileJiami(char *path, char *pathjia, char *password){FILE *pfr, *pfw;pfr = fopen(path, "r");pfw = fopen(pathjia, "w");if(pfr==NULL||pfw==NULL){fclose(pfr);fclose(pfw);return;}else{int stringLength = getfilesize(path);char *newstr = (char*)malloc(sizeof(char)*(stringLength + 1));for (int i = 0; i < stringLength; i++){char ch = fgetc(pfr);newstr[i] = ch;}newstr[stringLength] = '\0';printf("%s", newstr);stringJiami(password, newstr);for (int i = 0; i < stringLength; i++){fputc(newstr[i], pfw);}fclose(pfr);fclose(pfw);}}void fileJjiemi(char *pathjia, char *pathjie, char *password){FILE *pfr, *pfw;pfr = fopen(pathjia, "rb");pfw = fopen(pathjie, "wb");if (pfr == NULL || pfw == NULL){fclose(pfr);fclose(pfw);return;}else{//不对/*int stringlength = strlen(pathjia);char *newstr = (char*)malloc(sizeof(char)*(stringlength + 1));for (int i = 0; i < stringlength; i++){char ch = fgetc(pfr);newstr[i] = ch;}newstr[stringlength] = '\0';printf("\n\n%s", newstr);stringJiemi(password, newstr);for (int i = 0; i < stringlength; i++){fputc(newstr[i], pfw);}fclose(pfr);fclose(pfw);*/while (!feof(pfr)){char string[256] = { 0 };fgets(string, 256, pfr);stringJiemi(password, string);//加密啊fputs(string, pfw);//写入jie密文件}fclose(pfr);fclose(pfw);//关闭文件}}