PHP 把源文件加密到 BMP 位图

2017-10-31 09:40:09 +08:00
 waitmoonman

以前看过一个 C++的视频, 说的是把文件隐藏到 BMP 位图中。 学了 PHP 之后,( PHP 是世界上最好的语言) 应该也可以完成这个任务。

当然并没有什么实际作用,看看就可以了。 所以就动手做了一个~~~ 利用的是 BMP 位图在色道中,每四个字节就有一个字节是无用的,所以就可以把源文件base64化然后单个拆分存入图片中,再重新生成一张 BMP 位图, 表面上看不出有任何变化。大小如果不超过源文件的 1/4 的话,也是不会有变化的:

比如位图是 5M,需要加密的文件是 1M,当加密后,位图还是 5M,而且已经把需要加密的文件存入位图中

刚开始,可以加密文件,但是解密出来会有很多无用的字符串。 后来 ,当加密文件时,增加了 2 个标记, 一个标记文件名长度,用四个字节存储, 一个标记文件数据长度。用八个字节存储。 这样就可以保证能准确读取多大的数据块。 上点核心代码: 演示地址 github 地址 !!! demo 的地址,不需要上传 bmp 也可以的,因为我服务器内置了一张 2.47m 的 bmp, :smiley:, 你只要加密之后会返回一张 BMP 图片, 然后再点击解密按钮选择加密后的 bmp 位图就可以得到源文件了

3070 次点击
所在节点    PHP
8 条回复
sagaxu
2017-10-31 10:12:35 +08:00
图片压缩或者缩放后还能解密吗?
GeruzoniAnsasu
2017-10-31 13:54:15 +08:00
你这个做法,rgb565 的 bmp 和 rgba 的 bmp 都不适用的,另外宽度不对齐到 4 的 24 位 bmp 有额外的字节可以用

都是基本操作没啥特别的
waitmoonman
2017-10-31 14:48:38 +08:00
@sagaxu 不行的。 加密后的图片进行压缩的话,会导致内部的数据错乱,读取的时候会出错的。
waitmoonman
2017-10-31 14:49:31 +08:00
@GeruzoniAnsasu 受教了,没有深入接触位图的知识,只是看了一篇位图的文章然后写的。
sagaxu
2017-10-31 15:13:39 +08:00
@waitmoonman 你可以搜一下图片隐写技术,有很多基于信号变换的算法,能应对缩放或者拉伸
afeicool
2017-10-31 15:16:40 +08:00
php 确实是最好的语言,没毛病
waitmoonman
2017-10-31 18:03:52 +08:00
@sagaxu mark, 最近在做毕业设计, 忙完回头看一下, 有没有好的博客直接推荐?
waitmoonman
2017-10-31 18:04:09 +08:00
@afeicool 哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402143

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX