本文目录一览:
如何用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语言 读取完文件加密后如何储存并修改呢 求助
大概的改了一下,有什么问题,再问吧
#include stdio.h
#include stdlib.h
#include math.h
#include string.h
#include conio.h /*建议加入此头文件,以利于getch()的调用*/
char buffer[100] = {0};
static int c = 1;
int get_text()
{
int i = 0;
char file_name[100] = "a.txt";
FILE *fp;
if ((fp = fopen(file_name, "r")) == NULL)
{
fprintf(stderr, "can't find file %s!\n", file_name);
return -1;
}
while(i 5)
{
while(1)
{
char ch = fgetc(fp);
if (ch != EOF)
{
buffer[i++] = ch;
}
else
{
break; // 到达文件结尾了
}
}
buffer[i] = '\0';
fclose(fp);
//printf("nihao \n");
printf("%s\n", buffer); // 输出结果
return 0;
}
}
int set_psw(char *psw)
{
int i = 0;
char file_name[100] = "b.txt";
FILE *fp;
if ((fp = fopen(file_name, "w+")) == NULL)
{
fprintf(stderr, "can't find file %s!\n", file_name);
return -1;
}
fputs(psw, fp);
fclose(fp);
return 0;
}
int jiami()
{
char a[256];
int i;
//printf("请输入要加密的数字\n");
//scanf("%s",a);
if (get_text() != 0)
{
return -1;
}
for(i = 0; i = strlen(buffer); i++)
{
a[i] = buffer[i];
}
for(i = 0 ; i strlen(a); i++)
{
a[i] = a[i] + c;
}
if (set_psw(a) != 0)
{
return -1;
}
printf("加密后的密码为: %s。已保存在b.txt文件中。\n", a);
printf("***************\n");
printf("***************\n");
return 0;
}
int jiemi()
{
char b[256];
int i;
scanf("%s", b);
for(i = 0 ; i strlen(b); i++)
{
b[i] = b[i] - c;
}
printf("解密后的密码为:%s\n", b);
printf("***************\n");
printf("***************\n");
printf("***************\n");
return 0;
}
void mima(int c)
{
printf("设置成功\n");
printf("********\n");
printf("********\n");
printf("********\n");
}
int main()
{
int a;
while (1)
{
printf("************************* 0 退出程序 *************************\n");
printf("************************* 1 进行加密 *************************\n");
printf("************************* 2 进行解密 *************************\n");
printf("************************* 3 设置密钥 *************************\n");
printf("你要进行的操作是\n");
scanf("%d", a);
switch(a)
{
case 0:
exit(0);
break; // 这里的break是匹配switch的
case 1:
printf("请输入要加密的数字\n");
jiami();
continue; // 这里的continue是匹配while(1)的
case 2:
printf("请输入要解密的数字\n");
jiemi();
continue; // 这里的continue是匹配while(1)的
case 3:
printf("请输入四位数密钥\n");
scanf("%d", c);
mima(c);
continue; // 这里的continue是匹配while(1)的
}
}
}
C语言文件加密
#includestdio.h
int main()
{char ch;
FILE *fp1,*fp2;
fp1=fopen("d:\\file1.txt","r");
fp2=fopen("d:\\file2.txt","w");
printf("加密后的内容:\n");
while((ch=fgetc(fp1))!=EOF)
{ch^=0x6a; putchar(ch); fputc(ch,fp2);}
fclose(fp1);
fclose(fp2);
printf("\n解密后的内容:\n");
fp2=fopen("d:\\file2.txt","r");
while((ch=fgetc(fp2))!=EOF)
{ch^=0x6a; putchar(ch);}
return 0;
}