❶ 如何用c语言对文件进行加密和解密急求......................
文件分为文本文件和二进制文件。加密方法也略有不同。
1、文本文件
加密的主要是文本的内容,最简单的方法就是修改文档的内容,比如1.txt中的文件内容:
abcd
只要给每一个字符+1,就可以实现加密。文件内容即会变为
bcde
2、二进制文件加密
二进制文件加密也就是对应用程序加密,需要理解可执行文件格式,比如Windows平台的Exe文件它是PE结构,Linux上的可执行文件是ELF结构,要对这样的程序进行加密,实际上是开发一种叫做“壳”的程序,这种程序的开发,需要将扎实的底层基础,同时也需要对软件加密解密有细致的理解,比如流行的vmprotect、z壳以及早些年的upx壳、aspack等等。
3、无论哪种加密都牵涉到文件操作的问题,使用C语言进行文件操作时,极少使用C标准库中的I/O函数,大多数使用操作系统提供的内存文件映射相关的API函数,有兴趣,可以搜索相关的资料。
❷ 如何使用C语言编写一个文件夹加密器
1.文件夹加密是操作系统才能实现的功能,C语言处理不了,除非调用系统的命令。C语言可以直接加密文件本身。
2.加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。例如对称算法亦或加密。
3.什么是异或算法
异或的特点是原始值经过两次异或某一个数后会变成原来的值,所以有时利用这个特性来进行加密,加密端把数据与一个密钥进行异或操作,生成密文。接收方收到密文后利用加密方提供的密钥进行再次异或操作就能得到明文。
4.例程:
/*以DWORD为单位对文件进行加密,将每个DWORD与0xfcba0000(密钥)做异或,写入另一个文件*/
#include<stdio.h>
#include<stdlib.h>
#defineDWORDunsignedlong
#defineBYTEunsignedchar
#definefalse0
#definetrue1
intmain(intargc,char*argv[])
{
FILE*hSource;
FILE*hDestination;
DWORDdwKey=0xfcba0000;
char*pbBuffer;
DWORDdwBufferLen=sizeof(DWORD);
DWORDdwCount;
DWORDdwData;
if(argv[1]==0||argv[2]==0)
{
printf("missingargument! ");
returnfalse;
}
char*szSource=argv[1];
char*szDestination=argv[2];
hSource=fopen(szSource,"rb");//打开源文件.
hDestination=fopen(szDestination,"wb");//打开目标文件
if(hSource==NULL){printf("openSourceFileerror!");returnfalse;}
if(hDestination==NULL){printf("openDestinationFileerror!");returnfalse;}
//分配缓冲区
pbBuffer=(char*)malloc(dwBufferLen);
do{
//从源文件中读出dwBlockLen个字节
dwCount=fread(pbBuffer,1,dwBufferLen,hSource);
//加密数据
dwData=*(DWORD*)pbBuffer;//char*TOdword
dwData^=dwKey;//xoroperation
pbBuffer=(char*)&dwData;
//将加密过的数据写入目标文件
fwrite(pbBuffer,1,dwCount,hDestination);
}while(!feof(hSource));
//关闭文件、释放内存
fclose(hSource);
fclose(hDestination);
printf("%sisencryptedto%s ",szSource,szDestination);
return0;
}
❸ c语言写入文件方法
要写入文件,可以按照以下步骤进行操作:
1 在代码中引用stdio.h,即
#include <stdio.h>
C语言的所有文件操作接口,均声明在这个头文件中。
2 定义FILE *类型的变量。
3 打开文件,使用函数为fopen。格式为:
FILE *fopen(char *filename, char *mode);
参数filename为要写入的文件名,mode为打开的方式,如果仅需写入文件,可以使用"w"或
"wb"。
返回值为文件指针类型,赋值给之前定义的变量。如果返回值为NULL,代表打开失败,无法写入。
4 对文件进行写操作。C语言中有很多写文件的接口,包括fprintf, fwrite, fputs, fputc等等。
写操作可以执行多次。
5 在全部写操作完成后,执行fclose函数关闭文件指针。这样就实现了C语言写入文件。
❹ 如何用C语言对文件进行加密和解密
对于加密要求不高的完全可以自己定义规则来进行加密。这种加密是很简单很自由的,例如你在存文件的时候可以将文件中的每个字符都加上一个数,然后读取该文件的时候再每个字符相应地减去那个数,即可实现就简单的加密,这样你储存的文件看上去就是乱码了。只是这个规则太简单,规则你可以自己定,加密与解密对着来就行了。
下面程序用异或操作对文件进行加密和解密
/****************** 设计思路 ******************/
// 根据用户输入的加密/机密密码,
// 每次都拿原文件和密码等长度的一个字符串和密码
// 对应元素异或进行加密/解密
// 另外因为是用异或方法,所以加密和解密就是同一个程序
// 即按照同样的加密即是对文件的解密
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
char filename[256]; // 原文件
char password[256]; // 加密/解密密码
const char filenametemp[] = "temp15435255435325432543.temp"; // 加密/解密中间文件
void inputpass(char *pass); //密码输入以"******"显示
void main() {
FILE *fp; // 加密/解密的文件
FILE *fptemp; // 加密/解密过程临时文件
int pwdlen; // 密码长度
int i = 0; // 计数器
char ch = 0; // 读入的字符
printf("请输入要加密/解密的文件名(全路径名): \n");
gets(filename);
if( (fp = fopen(filename, "rb")) == NULL) {
printf("找不到文件 %s\n", filename);
exit(1);
} // if
printf("请输入要加密/解密的密码: \n");
inputpass(password);
pwdlen = strlen(password);
if(pwdlen == 0) {
printf("密码不能为空,加密/解密失败\n");
exit(1);
} // if
fptemp = fopen(filenametemp, "wb"); // 打开中间文件
while(1) {
ch = fgetc(fp);// 从原文件读入一个字符
if(feof(fp)) { // 已经读到文件尾
break; // 退出循环
}
ch ^= password[i++]; // 对原字符和密码进行异或操作
fputc(ch, fptemp); // 将异或结果写入中间文件
if(i == pwdlen) { // 使得原文件每和密码长度相同的固定长度异或加密
i = 0;
}
} // while
fclose(fp); // 关闭打开原文件
fclose(fptemp); // 关闭打开中间文件
remove(filename); // 删除原文件
rename(filenametemp, filename); // 将中间文件重命名为原文件
printf("加密/解密成功\n"); // 至此加密/解密成功
}
// 密码输入以"******"显示
void inputpass(char *pass) {
int i = 0;
char c;
while(isprint(c = getch())) {
pass[i++] = c;
// printf("*");
}
pass[i] = '\0';
printf("\n");
}
❺ c语言中的文件加密
//自己写的加密,加密方法就是根据输入的密码对文件中的内容进行异或后存放在加密后的文件中
//转载请声明program by STU caige
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>//getche()需要
#include<string.h>
char ch;
//异或函数
int YiHuo(FILE *f0,FILE *fp,int passwordnum,int move,char key)
{
while(fread(&ch,1,1,f0),!feof(f0))
{
if (key==49)//加密
{
ch=ch+move;
(char)(ch^=passwordnum);
fwrite(&ch,1,1,fp);
}
if (key==50)//解密
{
(char)(ch^=passwordnum);
ch=ch+move;
fwrite(&ch,1,1,fp);
}
}
}
int main()
{
//encrypt加密 decrypt解密
FILE *f0,*fe,*fd;
char fname0[50];
char efname[50]={0};
char dfname[50]={0};
char Password[50]={0},key=0,key2=0;
char sysfname[20]={0};
int p=0,passwordnum,move=0;//异或后移动的次数 ;
system("cls");
do
{
system("cls");
do
{
printf("1-----------加密文件\n");
printf("2-----------解密文件\n");
printf("Esc----------退出\n") ;
key=getch();//读入一个键盘码
}
while ((key!='1')&&(key!='2')&&(key!=27));
Password[50]=0;
passwordnum=0;
if (key==49)
{
system("cls");
printf("请输入要加密的文件绝对路径\n");
scanf("%s",fname0);
// while(key=0)
//打开原文件
if ((f0=fopen(fname0,"rb"))==NULL)
{
printf("文件打不开哦!\n");
key=0;//文件打开失败时key的值改变
exit(0);
printf("加密失败\n");
system("pause");
}
//只有文件fname0打开成功时才能继续打开efname
if(key==49)
{
system("cls");
printf("请输入完成加密的文件存储路径\n");
scanf("%s",efname);
if ((fe=fopen(efname,"w+"))==NULL)
{
printf("文件打不开哦!\n");
printf("加密失败\n");
fclose(f0);
system("pause");
exit(0);
key=0;
}
}
//如果打开文件成功则开始输入密码
if(key==49)
{
system("cls");
printf("请输入密码\n");
scanf("%s",Password);
//把字符密码转化为整形来异或
for(p=0;Password[p]!=0;p++)
passwordnum+=((int)Password[p]);
move=(int)(passwordnum%9);
while (move>9)
move=(int)(move%9);
printf("%d",move);system("pause");
}
if (key==49)
{//异或加密
system("cls");
YiHuo(f0,fe,passwordnum,move,key);
printf("\n加密成功,您的输出文件路径为:\n");
printf("%s",efname);
fclose(f0);
fclose(fe);
}
}
if (key==50)
{
system("cls");
printf("请输入要解密的文件绝对路径\n");
scanf("%s",fname0);
// while(key=0)
//打开原文件
if ((f0=fopen(fname0,"rb"))==NULL)
{
printf("文件打不开哦!\n");
key=0;//文件打开失败时key的值改变
exit(0);
printf("解密失败\n");
system("pause");
}
//只有文件fname0打开成功时才能继续打开dfname
if(key==50)
{
system("cls");
printf("请输入完成解密的文件存储路径\n");
scanf("%s",dfname);
if ((fd=fopen(dfname,"w+"))==NULL)
{
printf("解密失败");
fclose(f0);
system("pause");
printf("文件打不开哦!\n");
exit(0);
key=0;
}
}
//如果打开文件成功则开始输入密码
if(key==50)
{
system("cls");
printf("请输入密码\n");
scanf("%s",Password);
//把字符密码转化为整形来异或
for(p=0;Password[p]!=0;p++)
passwordnum+=((int)Password[p]);
move=(int)(passwordnum%9);
while (move>9)
move=(int)(move%9);
move=(-move);
}
if (key==50)
{//异或加密
system("cls");
YiHuo(f0,fd,passwordnum,move,key);
printf("\n解密成功,您的输出文件路径为:\n%S",dfname);
system("pause");
fclose(f0);
fclose(fd);
}
}
}
while(key!=27);//当key为0,即读写两个文件都打开成功时才结束循环
return 0;
printf("\n谢谢使用!,program by STU caige\n");
system("pause");
}
❻ C语言怎么给文件夹写保护
用system("attrib命令");
system("attrib +R abc");
给文件夹设“只允许读”
system("attrib +H abc");
隐藏文件夹
详细见 DOS 帮助, 打命令:
attrib /?
❼ 怎样用C语言保存一个文件
在C语言中,文件有多种读写方式,可以一个字符一个字符地读取,也可以读取一整行,还可以读取若干个字节。文件的读写位置也非常灵活,可以从文件开头读取,也可以从中间位置读取。
在C语言中,二进制方式很简单,读文件时,会原封不动的读出文件的全部内容,写的时候,也是把内存缓冲区的内容原封不动的写到文件中。
而对文本文件的处理就不一样了。Windows 和 DOS 下的文本文件以CRLF(0X0D 0X0A)作为换行符,而C语言本身以LF(0X0A)作为换行符,所以以文本方式写入数据时,会将LF(0X0A)替换为CRLF(0X0D 0X0A),而读取数据时又会替换回来。
CR(0X0D)表示回车符,也就是 '
';CL(0X0A)表示换行符,也就是 '
'。在Linux和其他一些系统中,文本文件的换行符就是LF(0X0A),与C语言的换行符一样。所以也就没有了文本方式和二进制方式的区分,使不使用'b'标志都是一样的。
(7)c语言怎么写保护文件扩展阅读
C语言中文件的读取和写入
在C语言中写文件
//获取文件指针FILE *pFile = fopen("1.txt", //打开文件的名称
"w"); // 文件打开方式 如果原来有内容也会销毁//向文件写数据fwrite ("hello", //要输入的文字
//文字每一项的大小 以为这里是字符型的 就设置为1 如果是汉字就设置为4
strlog("hello"), //单元个数 我们也可以直接写5
pFile //我们刚刚获得到的地址 );//fclose(pFile); //告诉系统我们文件写完了数据更新,但是我们要要重新打开才能在写fflush(pFile); //数据刷新 数据立即更新