文件加解密,文件操作



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;

}

 

 

 

 

 

 

 

 

 

 

时间: 2024-11-03 09:51:46

文件加解密,文件操作的相关文章

WinXP通过命令行加解密文件的技巧

  对文件加解密的方法有很多种,WinXP系统就为用户提供了一个特殊功能--通过命令行cipher加解密文件或文件夹. 下面我们来了解下这功能吧. 详解如下: 1.命令格式: cipher [{/e|/d}] [/sir] [/a] [/I] [/f] [/q] [/h] [/k] [/u[/n]] [PathName [-]] | [/rathNameWithoutExtension] | [/wathName] 2.参数设置: 在不含带参数的情况下使用,则 cipher 将显示当前文件夹及其

WPS for Linux A10新功能:增XLSX文件加解密支持

1. 全新2013界面 2. 加入多语言机制, 可根据需要设置语言 3. ET新增图表读取 支持 4. ET新增TXT. CSV.PRN文件读写,支持多编码 5. ET新增XML文 件读写 6. ET新增XLSX 文件加解密支持 7. WPS新增TXT 文件读写,支持多编码 修 复 1. ET写XLSX文 件时丢失部分自选图形填充效果 2. 无法打开文件名含 有反斜杠的文件 3. WPP插入特定背 景音乐文件导致崩溃 立即下载 kingsoft-office_9.1.0.4032~a10_i38

unix 方便的加密解密文件

    linux中安装mcrypt,然后使用crypt加密解密文件.     mac os X中安装ccrypt,使用ccrypt和ccdecrypt加解密文件.

android中对文件加密解密的实现_Android

现在项目里面有一个需求,本项目里面下载的视频和文档都不允许通过其他的播放器播放,在培训机构里面这样的需求很多.防止有人交一份钱,把所有的课件就拷给了别人.这样的事情培训机构肯定是不愿意的.现在我项目里面也出了这么个需求.下面介绍一下我的实现. 文件加解密的流程及原理 1.加密方法:存储文件时,从输入流中截取文件的字节数组,对字节数组进行加密,至于加密的方式和算法就可以视需求而定了,然后把加密后的字节数组写入到文件中,最后生成加密后的文件: 2.解密方法:同加密方法一样,只不过是对字节数据进行解密

android中对文件加密解密的实现

现在项目里面有一个需求,本项目里面下载的视频和文档都不允许通过其他的播放器播放,在培训机构里面这样的需求很多.防止有人交一份钱,把所有的课件就拷给了别人.这样的事情培训机构肯定是不愿意的.现在我项目里面也出了这么个需求.下面介绍一下我的实现. 文件加解密的流程及原理 1.加密方法:存储文件时,从输入流中截取文件的字节数组,对字节数组进行加密,至于加密的方式和算法就可以视需求而定了,然后把加密后的字节数组写入到文件中,最后生成加密后的文件: 2.解密方法:同加密方法一样,只不过是对字节数据进行解密

spring、spring-boot配置文件属性内容加解密

实际项目开发过程中,我们的应用程序都有很多的配置文件(例如properties或者yml文件等),我们时常会遇到需要对配置文件敏感字段的参数内容进行加密处理(比如数据库连接密码.与第三方的通信密钥等). 如果采用一定采用传统的springMVC做系统集成,我们可以继承PropertyPlaceholderConfigurer类并复写其converProperty方法,在该方法内一般需要做两步处理: 1.根据参数名propertyName或者根据参数值propertyValue判断当前是否需要进行

两种JavaScript的AES加密方式(可与Java相互加解密)_javascript技巧

由于JavaScript属于弱类型脚本语言,因此当其与强类型的后台语言进行数据交互时会产生各种问题,特别是加解密的操作.本人由于工作中遇到用js与Java进行相互加解密的问题,在网上查了很多资料及代码段,均无法解决.后总结多篇文档内容终于找到解决办法,现记录与此: 下面给大家介绍两种JavaScript的AES加密方式,具体详情如下所示: 第一种:加解密时需要秘钥(key)和秘钥偏移量(iv)的情况,在线验证地址:http://www.seacha.com/tools/aes.html //该方

保护好我的文件 赤手空拳给文件加密

通常电脑上 都有一些隐私文件需要加密或隐藏,不论是使用加密工具还是EFS,一旦遇到密码丢失,或者文件损坏,重要数据将很难挽回,后果不堪设想.如果能够不使用其他辅助软件而只通过设置一些技巧就能达到加密的目的,那该多好,下面介绍几个简单的加密方法: 路径的分隔符号文件夹加密法 加密:大家都知道在WINDOWS中不论是一个"\"还是两个"\ "符号都代表是路径的分隔符号,比如"C:\WINDOWS\System..exe"的意思就是C分区中的WINDO

文件流 二进制-C++文件流二进制加解密问题

问题描述 C++文件流二进制加解密问题 最近在编一个加密程序,想通过fstream来对文件进行操作.想用文件流实现在文件中的二进制模二加,求助大神们. fstream finout: finout.open(filename,ios_base::binary):接下来就不知道怎么做了,不想用fwrite