1、fseek,ftell,fread,fwrite(简单文件加密)
#define
_CRT_SECURE_NO_WARNINGS
//去掉安全检查
#include
<stdio.h>
#include
<stdlib.h>
/*读取文件大小*/
int
getfilesize(char
*path)
{
FILE *pf
= fopen(path,
"r");
if (pf
== NULL)
{
fclose(pf);
return -1;
}
else
{
fseek(pf,0,SEEK_END);
int
length =
ftell(pf);
//获取文件大小
return
length;
}
fclose(pf);
}
/*实现文件复制*/
void
copy(char
*oldpath,char
*newpath)
{
FILE *pfr,
*pfw;
//以打开二进制文件的方式打开
pfr =
fopen(oldpath,
"rb");
//写入二进制模式
pfw =
fopen(newpath,
"wb");
if (pfr
== NULL ||
pfw ==
NULL)
{
fclose(pfr);
//关闭文件
fclose(pfw);
return;
}
else
{
int
length =
getfilesize(oldpath);
//分配内存,读取文件
char *p
= (char *)malloc(length
* sizeof(char));
//读取二进制到内存
fread(p,sizeof(char),length,pfr);
//写入二进制到文件
fwrite(p,sizeof(char),length,pfw);
//关闭文件
fclose(pfr);
fclose(pfw);
}
}
void
encryptyfile(char
*oldpath,char
*newpath)
{
FILE *pfr,
*pfw;
pfr =
fopen(oldpath,
"rb");
//写入二进制模式
pfw =
fopen(newpath,
"wb");
if (pfr
== NULL ||
pfw ==
NULL)
{
//关闭文件
fclose(pfr);
fclose(pfw);
return;
}
else
{
int
length =
getfilesize(oldpath);
//分配内存,读取文件
char *p
= (char *)malloc(length*sizeof(char));
//读取二进制到内存
fread(p,sizeof(char),length,pfr);
for (int
i = 0;
i <
length;i++)
{
//加密方法是,与制定字符进行异或操作
p[i]
^= 'A';
}
//写入二进制到文件
fwrite(p,
sizeof(char),
length,
pfw);
//关闭文件
fclose(pfr);
fclose(pfw);
}
}
/*解密文件*/
void
decodefile(char
*oldpath,char
*newpath)
{
FILE *pfr,
*pfw;
pfr =
fopen(oldpath,
"rb");
//写入二进制模式
pfw =
fopen(newpath,"wb");
if (pfr
== NULL ||
pfw ==
NULL)
{
fclose(pfr);
fclose(pfw);
return;
}
else
{
int
length =
getfilesize(oldpath);
//分配内存,读取文件
char *p
= (char *)malloc(length*sizeof(char));
//读取二进制到内存
fread(p,sizeof(char),length,pfr);
int
i;
for (i
= 0; i <
length;i++)
{
p[i]
^= 'A';
}
//写入二进制到文件
fwrite(p,
sizeof(char),
length,
pfw);
}
//关闭文件
fclose(pfr);
fclose(pfw);
}
int
main(int
argc,char
*argv[])
{
char *path1
= "G:\\1.txt";
char *path2
= "G:\\2.txt";
char *path3
= "G:\\3.txt";
encryptyfile(path1,
path2);
decodefile(path2,
path3);
//printf("%d\n",getfilesize(path1));
system("pause");
return 0;
}
上面的过程将会把加解密的文件输出到文件中。
#define
_CRT_SECURE_NO_WARNINGS
#include
<stdio.h>
#include
<stdlib.h>
char
jiami(char
ch)
{
return
ch ^ 123;
}
char
jiemi(char
ch)
{
return
ch ^ 123;
}
void
jia(char
*path,
char *pathjia)
{
FILE *pfr,
*pfw;
pfr =
fopen(path,
"r");//读取
pfw =
fopen(pathjia,
"w");//写入
if (pfr
== NULL ||
pfw ==
NULL)
{
fclose(pfw);
fclose(pfr);
return;
}
else
{
//feof(FILE *pf)
到了文件末尾1,没有到就是0
//下面的过程将把文件内容输出到屏幕上。
while (!feof(pfr))
{
//读取字符
char
ch =
fgetc(pfr);
putchar(ch);
//输出字符的时候将字符加密
fputc(jiami(ch),
pfw);
}
}
fclose(pfr);
fclose(pfw);//关闭文件
}
/*解密*/
void
jie(char
*path,char
*pathjie)
{
FILE *pfr,
*pfw;
//读取
pfr =
fopen(path,
"r");
//写入
pfw =
fopen(pathjie,"w");
if (pfr
== NULL ||
pfw ==
NULL)
{
fclose(pfr);
fclose(pfw);
return;
}
else
{
//到了文件末尾1,没有到就是0
while (!feof(pfr))
{
char
ch =
fgetc(pfr);//读取字符
putchar(ch);
fputc(jiemi(ch),
pfw);//写入一个加密的字符
}
}
fclose(pfr);
//关闭文件
fclose(pfw);
}
int
main(int
argc,char
*argv[])
{
char *path1
= "G:\\1.txt";
char *path2
= "G:\\2.txt";
char *path3
= "G:\\3.txt";
//jia(path1, path2);
jie(path2,
path3);
system("pause");
return 0;
}
密码加密
头文件:
#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 *jiastring);
void
filejiami(char
*path,
char *pathjia,
char *password);
void
filejiemi(char
*pathjia,
char *pathjie,
char *password);
#include
"encrytiondecrytion.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;
int
i,j;
for (i
= 0; i <
ci;i++)
//循环次数
{
//循环密码
for (j
= 0; j <
passlength;j++)
{
string[passlength*i
+ j] ^=
password[j];
}
}
}
else
{
int
ci =
stringlength /
passlength;
//循环次数
int
i,
j;
for (int
i = 0;
i <
ci;i++)
{
//循环密码
for (j
= 0; j <
passlength;j++)
{
string[passlength
* i +
j] ^=
password[j];
}
}
int
lastlength =
stringlength %
passlength;//剩下的长度
for (int
i = 0;
i <
lastlength;i++)
{
string[passlength*(stringlength
/ passlength) +
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;//循环次数
int
i,
j;
for (i
= 0; i <
ci;
i++)
{
for (j
= 0; j <
passlength;j++)
{
//异或加密
jiastring[passlength
* i +
j] ^=
password[j];
}
}
}
else
{
//循环次数
int
ci =
stringlength /
passlength;
int
i,
j;
for (i
= 0; i <
ci;i++)
{
//循环密码
for (j
= 0; j <
passlength;j++)
{
//异或加密
jiastring[passlength*i
+ j] ^=
password[j];
}
}
//剩下的长度
int
lastlength =
stringlength %
passlength;
for (int
i = 0;
j <
lastlength;i++)
{
jiastring[passlength*(stringlength
/ passlength) +
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
length =
getfilesize(path);
char *newstr
= (char*)malloc(sizeof(char)*(length
+ 1));
for (int
i = 0;
i <
length;i++)
{
char
ch =
fgetc(pfr);
//获取一个字符
newstr[i]
= ch;//不断存入字符
}
//字符串处理为'\0'
newstr[length]
= '\0';
//加密字符串
stringjiami(password,
newstr);
int
i;
for (i
= 0; i <
length;i++)
{
//挨个写入字符
fputc(newstr[i],
pfw);
}
}
fclose(pfr);
//关闭文件
fclose(pfw);
}
main.c
#define
_CRT_SECURE_NO_WARNINGS
#include
<stdio.h>
#include<stdlib.h>
#include
"encrytiondecrytion.h"
int
main(int
argc,char
*argv[])
{
char
string[50] =
"锄禾日当午";
char *password
= "123";
printf("%s\n",stringjiami(password,string));
printf("%s\n",
stringjiami(password,
string));
char *path1
= "G:\\1.txt";
char *path2
= "G:\\2.txt";
char *path3
= "G:\\3.txt";
filejiami(path1,
path2,
"ABCDE");
filejiami(path2,
path3,
"ABCDE");
system("pause");
}
fscanf
#define
_CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int
main(int
argc,
char *argv[])
{
char
str[100] = { 0 };
fscanf(stdin,
"%s",
str);
fprintf(stdout,
"str=%s\n",
str);
system(str);
return 0;
}