写点什么

MFC | 图片的傻瓜式加解密方法

  • 2022-10-12
    河北
  • 本文字数:1207 字

    阅读完需:约 4 分钟

MFC | 图片的傻瓜式加解密方法

说起了加密算法,不得不提一句,在软件设计师考试中就考到了这一点,例如:对称加密算法有哪些,非对称加密算法有哪些,密钥算法有哪些已经实现思路。


在这里,不讲那么复杂的方式,在前一段时间非要实现这样一个功能:图片加解密方法,想要快速演示,没有办法了,我就稍微偷了个懒,反正只是演示,看看效果得了,其实,我的内心也是很无语的。

实现思路

一般在使用加密的时候采用各种算法,这次我没有用那么高深的技术,我只是在读取图片数据时,前面添加了些内容,人为破坏了图片流的格式,这样子,再打开时,就看不到图片的内容了。

中心思想

数据流开头,数据流末尾分别添加固定的头数据、尾数据,并且对前十位数据块进行加密操作。

我猜肯定没有人会做到我这么鸡肋,如果想要看我这么鸡肋的做法,那就继续看下去吧!

在实现过程中,唯一的重点就是:读文件,写文件

所有的文件在 C++程序中,都可以使用二进制流的方式读取,这里,我们也采用的二进制流方式。

读文件操作

打开文件 -> 读取文件的长度 -> 获取文件的实际内容 -> 数据组装 -> 关闭文件

FILE  *p = fopen(strSourceFile , "rb");if(p == nullptr){    return false;}
复制代码

使用 C 底层的访问方式,FILE::fopen 打开文件,并且以二进制流的方式读取。

int nlength = _filelength(_fileno(p));  //得到图像的长度
复制代码

此时,我们可以得到当前文件的整体长度,紧接着,我们要拿着文件的长度,读取整个文件内容

unsigned  char* chTempInfo = new unsigned  char[nlength];fread(chTempInfo, sizeof(unsigned char),nlength,p);
复制代码

到这里,已经可以获取到整个文件的内容了。

上述已经说到了,这里采用了傻瓜加密算法,在数据流开头以及结尾处,添加了固定头信息。

那么该如何操作呢?

这里,我们重新 new 一个与读出的文件相同的内存,用来存放:数据头 + 真实数据 + 数据尾。

两个数据头 和 一个数据尾。

int nLen = nlength + 3;unsigned char* chReadInfo = new unsigned char[nLen];
//数据头添加chReadInfo[0]=HeaderData;chReadInfo[1]=HeaderData;
//数据尾添加chReadInfo[nLen-1]=TailData;
复制代码

那么,文件的实际数据如何拼接到 chReadInfo 呢?


对于 char*数据的内容,一般会采用 memcpy 方式。

//中间数据添加memcpy(chReadInfo+2 , chTempInfo , nlength);
复制代码

最后,关闭读取文件。

fclose(p);
复制代码

当前,要是为了更安全操作,还可以对组装的数据进行加密处理,比如我们经常用到的 base64 加密算法。

写文件操作

对于写文件来说,会简单不少,直接使用 fwrite 写入就可以了

FILE *q = fopen(strGenerateFile , "wb");fwrite(chReadInfo , sizeof(unsigned char) , nLen, q);fclose(q);
复制代码

对于解密操作,我们该如何获取呢?


在读取加密的文件后,假设你对该文件做了类似于 base64 加密算法时,需要先将数据流进行解密,然后,筛选出数据数据。


其实,就是去掉两个字节的头数据以及最后一个尾数据,还是采用 memcpy 方法。这里也就不再过多说明啦!


我是中国好公民 st,一名 C++开发程序媛~

发布于: 刚刚阅读数: 3
用户头像

书山有路勤为径,学海无涯苦作舟 2022-07-01 加入

擅长语言:C++ 涉及语言:Python

评论

发布
暂无评论
MFC | 图片的傻瓜式加解密方法_c++_中国好公民st_InfoQ写作社区