extern char* file_encrypt(char *file_text,unsigned long int length,unsigned int password)
{
int num = 0;
char *file_mov;
file_mov = file_text;
printf("%s\n",file_text);
while(1)
{
*(file_mov + num) = *(file_mov + num) + password;
num++;
if(num == length)
{
break;
}
}
printf("%d\n",num);
return file_mov;
}
寫了1個加密解密程式,以上是加密模塊,解密模塊只將+password 改為-password
加密的文本初始化為:123456789\0abcdefgh
當輸入的password為 1234 時,解密的結果為:12345678.\0abcdefgh
還測驗了password為 :1,99,11111等情況,均無此問題,請大神解惑
uj5u.com熱心網友回復:
加密 解密還有呼叫的代碼都貼出來問題可能在其他地方
uj5u.com熱心網友回復:
解密模塊:#include"encryption.h"
extern char* file_decrypt(char *file_text,unsigned long int length,unsigned int password)
{
int num = 0;
char *file_mov;
file_mov = file_text;
while(1)
{
*(file_mov + num) = *(file_mov + num) - password;
num++;
if(num == length)
{
break;
}
}
printf("%d\n",num);
return file_mov;
}
保存模塊:
#include"encryption.h"
extern void file_save(char *text,unsigned long int length,char *file)
{
FILE *fp = NULL;
int count = 0;
fp = fopen(file,"w");
if(fp == NULL)
{
printf("創建保存檔案失敗\n");
}
else
{
count = fwrite(text,sizeof(char),length,fp);
if(count == 0)
{
printf("資訊存盤失敗\n");
}
}
fflush(fp);
fclose(fp);
free(text);
}
資訊讀取模塊:
#include"encryption.h"
extern char* read_src_file(unsigned long int *file_length,char *src_file)
{
FILE *fp = NULL,*fp1 = NULL;
char *file_text = NULL;
fp = fopen(src_file,"r");
if(fp == NULL)
{
printf("檔案打開失敗\n");
return NULL;
}
fseek(fp,0,SEEK_END);
*file_length = ftell(fp);
rewind(fp);
file_text = (char*)malloc(sizeof(char)*((*file_length)+1));
fgets(file_text,*file_length+1,fp);
fclose(fp);
return file_text;
}
主函式:
int main()
{
//引數設定
unsigned long int i = 0;
unsigned long int *file_length = &i;
unsigned int password = 0;
int operand = 0;
char *text = NULL,*file = NULL,*file_text = NULL;
char dest_file[100],src_file[100];
char jud;
//幫助資訊
while(1)
{
help_print();
printf("輸入你的命令:\n");
scanf("%d",&operand);
switch(operand)
{
case 1://加密資訊
{
get_file(dest_file,src_file);
file_text = read_src_file(file_length,src_file);
if(file_text == NULL)
{
break;
}
printf("輸入數字密碼:\n");
scanf("%d",&password);
text = file_encrypt(file_text,*file_length,password);
file_save(text,*file_length,dest_file);
break;
}
case 2://解密資訊
{
get_file(dest_file,src_file);
file_text = read_src_file(file_length,src_file);
if(file_text == NULL)
{
break;
}
if(password == 0)
{
printf("沒有初始化密碼,請輸入數字密碼:\n");
scanf("%d",&password);
}
text = file_decrypt(file_text,*file_length,password);
file_save(text,*file_length,dest_file);
break;
}
case 3:
{
exit(0);
}
default:
{
printf("錯誤的命令\n");
operand = 0;
break;
}
}
while(operand != 0)
{
printf("需要繼續操作嗎(y/n)");
scanf("%c",&jud);
if(jud == 'n' || jud == 'N')
{
exit(0);
}
else if(jud == 'y' || jud == 'Y')
{
operand = 0;
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77448.html
標籤:新手樂園
上一篇:Qt打包release版本,總是打包debug的相關依賴,為什么
下一篇:求大神幫忙
