@ 2012.03.04 , 23:53

更高级的藏文件法:数码隐写术

之前我们提到过怎样把文件藏在图片里怎样往音频里藏图片这两种方法。

前一种弱爆了,仅仅只是把图片压缩包合体一下;后一种太过麻烦,还藏不了复杂的图,而且图像的还原度并不高。今天我们来介绍一种高级一些的方法:数码隐写。

[-]

上面这张图就是一张很有内涵的超载鸡(顺带一提搬到云服务器之后大家没见过超载页面了吧,是不是很想它?),里面藏了……嘿嘿我先不说,看看有没有同学会去解密。

先解释一下原理:图片里每个像素是由红绿蓝三色组成的,每色分别有8比特的位置存放数据,然而它们用不了这么多空间:红占5比特,绿是6比特,蓝也是5比特,因此每个像素我们都能再多塞3+2+3=8个比特(1字节)的数据进去。说到这里你大概也明白了,没错,我们要做的就是把需要隐藏的文件拆散,塞进这些没有被使用的空间里去。


这段就是用于解码的Ruby代码,运行之前请确保你安装了ImageMagick、cURL、mplayer以及Ruby:

#!/usr/bin/env ruby
name='omf'
`curl http://i129.photobucket.com/albums/p240/roveme/jandan/#{name}.png | convert - -compress none #{name}.ppm`
ppm = File.open("#{name}.ppm")
3.times { ppm.readline }
enc = ppm.read.split(' ').map { | x | x.to_i }
bytes = 0.upto(enc.length / 3 - 1).map { | x |
(enc.shift & 7) < < 5\ | (enc.shift & 3) << 3\ | (enc.shift & 7) }.pack('C*') name = bytes.slice!(0, bytes.slice!(0, 1).unpack('C')[0]) out = File.open("#{name}", "w") out << bytes[0, bytes.slice!(0, 8).unpack('q')[0]]

运行以后就会出现一个3gp文件。“3gp”绝对不是三级片的意思,这我会随便告诉你么?

同时也附上加密用的代码,这段比较长所以我就不贴出来了,要的同学点这里下载

本文译自 Chris McKenzie's blog,由 ivanchaos 编辑发布。

支付宝打赏 [x]
您的大名: 打赏金额:
赞一个 (2)