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