将文件加密到图片文件中
原理以bmp文件为例,在32位格式的bmp图片中,每个像素都有四个通道,分别为ARGB,也就是透明度,红色,绿色,蓝色。但bmp的透明度通道似乎不会被软件所解析,所以当修改其内容时并不会对图片显示有影响。
故可进行操作:将待加密文件转为字节数组,将每一个字节逐个存入 bmp的alpha通道中即可完成加密,解密则是将图片的alpha通道内容读出并拼接。
同时用了bmp文件本身的保留区(06-09)来存储原文大小,保留区本身无意义,进行修改不会影响
代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124import ja ...
bmp图像结构了解与编辑
参考资料BMP图像文件完全解析 - 知乎 (zhihu.com)
测试文件文件大小为8*8,保存格式为24色,
每行的开头都为000000的黑色,结尾为ffffff的白色,方便判断行开头与行结尾
文件格式
文件标识:类似于class文件的cafebabe,bmp文件开头为ascii编码的BM,也就是424d
文件大小:从02字节到05字节为文件大小,且为小端字节序,测试文件中为000000f6,也就是246,单位为字节
保留位,无意义:06-09字节
图像开始位置:0A-0D字节,表示图像像素开始位置,这里可以看到是00000036,刚好是我们做了标识的纯黑色开头,只不过上下是颠倒的
图像头大小:0D-11字节,标识头的大小,测试文件中是0x28,也就是40个字节
图像宽高:紧挨着的4字节为图像宽度,再往后4字节为图像高度,这里都是8,注意图像的高度和宽度是有正负之分的,当高度为正数时,图像的存储方式为从下到上
颜色平面数:2字节 恒为1
每个像素的位数:2字节 其值可为1,4,8,16,24,32,24位为常见的RGB,32位则多了arpha通道
压缩方式:4字节,全为0为不压缩 ...