博主刚刚学完C语言的基础语法知识
一直想写一些自己的程序
而博主又是一个很懒的人
特别是对于记忆的东西很懒
我平时都把重要的东西放在一个txt文档里面
于是我便想对我的那个文件进行加密码
没错就是加密码而不是加密,我开始对这个概念也是很模糊
想法:
1:首先我的想法是这样的,我想把东西都保存在一个txt文档里,然后和我用C语言写的控制台程序放在一起,每次当我要看那个文档的时候就要运行那个程序去输入密码才能看见,不然直接是打不开的。
2:然后我就去写代码,写到一半我就写不下去了,然后就百度,发现百度不到有对保护这个概念的东西,都是对内容进行加密,而没有涉及到在不改原文档的情况下去进行保护。
3:但我依旧不死心,然后我走了一些弯路,就想把内容先用二进制录进去再写上密码,我当时是认为二进制文件没办法直接打开查看应该就算安全了。不过我还是发现了一些问题。
4:我发现我对文件的理解有误,文件只是磁盘的一堆数据而已,就算写入的是二进制,但依旧可以用一些工具读出来,只是人为定制的编码不同而已,在磁盘中都一样,于是我觉得这个写不下去了。
5:最后我还是想加上密码,我才突然想起可以写成word文档进行加密码或者用压缩包加密码。
总结:
虽然这个过程很无脑,但我还是收获了许多
1:我对文件的理解更深入了一些
2:我学会了去获取整个文件的长度及对其内容的读写
FILE* fp;
int len;
char* p;
fp = fopen("txt", "r"); // txt文件名
fseek(fp, 0L, SEEK_END); // 定位到文件末尾
len = ftell(fp); // 得到文件大小
p = (char *)malloc(len + 1); // 根据文件大小动态分配内存空间
if (p == NULL)
{
fclose(fp);
return 0;
}
fseek(fp, 0L, SEEK_SET); // 定位到文件开头
fread(p, len, 1, fp); // 一次性读取全部文件内容
p[len] = '\0'; // 字符串结束标志
需要注意的是对在C语言中输出的是ANSI编码格式的
而且函数ftell()是有一定的使用范围的:该函数对大于231-1文件,即:2.1G以上的文件操作时可能出错。
3:我发现我对整体目标的把握并不够,并没有很好的了解很多东西,导致花费了很多时间
但我还是有许多的不懂,也许这篇博客操之过急,我还是想知道为什么那些加密软件能为文件上锁,是的用户不输入密码无法打开文件比如说word对文件的加密和压缩包的加密,我会更加的了解然后继续学习