以前看过一个 C++的视频, 说的是把文件隐藏到 BMP 位图中。 学了 PHP 之后,( PHP 是世界上最好的语言) 应该也可以完成这个任务。
当然并没有什么实际作用,看看就可以了。
所以就动手做了一个~~~
利用的是 BMP 位图在色道中,每四个字节就有一个字节是无用的,所以就可以把源文件base64
化然后单个拆分存入图片中,再重新生成一张 BMP 位图, 表面上看不出有任何变化。大小如果不超过源文件的 1/4 的话,也是不会有变化的:
比如位图是 5M,需要加密的文件是 1M,当加密后,位图还是 5M,而且已经把需要加密的文件存入位图中
刚开始,可以加密文件,但是解密出来会有很多无用的字符串。 后来 ,当加密文件时,增加了 2 个标记, 一个标记文件名长度,用四个字节存储, 一个标记文件数据长度。用八个字节存储。 这样就可以保证能准确读取多大的数据块。 上点核心代码: 演示地址 github 地址 !!! demo 的地址,不需要上传 bmp 也可以的,因为我服务器内置了一张 2.47m 的 bmp, :smiley:, 你只要加密之后会返回一张 BMP 图片, 然后再点击解密按钮选择加密后的 bmp 位图就可以得到源文件了
1
sagaxu 2017-10-31 10:12:35 +08:00
图片压缩或者缩放后还能解密吗?
|
2
GeruzoniAnsasu 2017-10-31 13:54:15 +08:00
你这个做法,rgb565 的 bmp 和 rgba 的 bmp 都不适用的,另外宽度不对齐到 4 的 24 位 bmp 有额外的字节可以用
都是基本操作没啥特别的 |
3
waitmoonman OP @sagaxu 不行的。 加密后的图片进行压缩的话,会导致内部的数据错乱,读取的时候会出错的。
|
4
waitmoonman OP @GeruzoniAnsasu 受教了,没有深入接触位图的知识,只是看了一篇位图的文章然后写的。
|
5
sagaxu 2017-10-31 15:13:39 +08:00
@waitmoonman 你可以搜一下图片隐写技术,有很多基于信号变换的算法,能应对缩放或者拉伸
|
6
afeicool 2017-10-31 15:16:40 +08:00
php 确实是最好的语言,没毛病
|
7
waitmoonman OP @sagaxu mark, 最近在做毕业设计, 忙完回头看一下, 有没有好的博客直接推荐?
|
8
waitmoonman OP @afeicool 哈哈
|