文件操作-按行加密解密

文本文件按行加密和解密这样可以保证文本文件的安全性,即使用文本文件丢失也不会造成文件内容的泄密。

按行加密有一点就是 \n 的转换 与一行的判断。因为是按行加密的,而一行的结束标识是 \n,字符串的结束标识是 \0 而当遇到 \n 时加密后的字符肯定不再是 \n 这样再解密时就没有办法判断这是一行的位置,因为这时没有 \n 的结束标识位了。这时我们手动处理 \n,因为\n 在文本文件中都是以 \r\n 替代 \n 这时我们判断遇到 \r 或 \n 就用 \0 替换。而这一行的密码后的 \n结识没了,这时我们把每一行加密码后的文本中手动加入 \n ,解密时按相同的方式进行处理,这样就能保证一行数据的完整读取了。

详见以下代码:

/*
	按行加密这样文本不能名文显示,达到了安全性。而在查询时又可以使用按行解密查询。
*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void run(char *str)
{
	/* 这里是把 \n 换成 \0 */
	char *p = str;
	while (*p != '\0')
	{
		if (*p == '\r' || *p == '\n')
		{
			*p='\0';	//替换
		}
		p++;
	}

	int length = strlen(str);
	for (int i = 0; i < length; i++)
	{
		str[i] = str[i] ^ 5;
	}

}

void jia(char *path)
{
	FILE *pfr = fopen(path, "rb");
	FILE *pfw = fopen("D:\\Ccode\\文件操作\\获取文件大小\\获取文件大小\\baidujia.txt", "wb");
	if (pfr == NULL || pfw == NULL)
	{
		printf("文件打开或读失败!\n");
		return;
	}
	else
	{
		while (!feof(pfr))
		{
			char str[256] = { 0 };
			fgets(str, 255, pfr);
			run(str);
			fputs(str,pfw);
			fputs("\n", pfw);	//这是分成一行的标识,要不加密码出来的文本不有区分行。
		}
	}
	fclose(pfr);
	fclose(pfw);

}

void jie(char *path,char *findstr)
{
	FILE *pfr = fopen(path, "rb");
	//FILE *pfw = fopen("D:\\Ccode\\文件操作\\获取文件大小\\获取文件大小\\baidujie.txt", "wb");
	if (pfr == NULL )
	{
		printf("文件打开或读失败!\n");
		return;
	}
	else
	{
		while (!feof(pfr))
		{
			char str[256] = { 0 };
			fgets(str, 255, pfr);
			run(str);
			char *res = strstr(str, findstr);
			if (res)
			{
				printf("%s\n", res);
			}
		}
	}
	fclose(pfr);
	
}

char *path = "D:\\Ccode\\文件操作\\获取文件大小\\获取文件大小\\baidu.txt";
char *pathjia = "D:\\Ccode\\文件操作\\获取文件大小\\获取文件大小\\baidujia.txt";

void main()
{
	//jia(path);
	jie(pathjia,"张海娜");

	system("pause");
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值