本文将介绍一种适用于Windows和Linux的隐写程序:steghide。

隐写是一种将任意文件隐藏在图片或者音频等其他媒介的方式。steghide具有将这些文件隐藏在JPG或者MP3文件中的能力。 这种隐写和简单的在文件中附加什么数据不同——它产生的结果仍然是看上去完全无害的图片,即使分析其二进制内容也是如此。 盖因其原理是利用数学算法,将数据以人不能察觉地方式存储在图片的像素或者音频的波形中。

隐写算法有各种各样,相关论文也有很多,这里不再介绍。steghide使用的方法能存储的数据量很大,因此是这里推荐的。

1. 安装

在Linux下,如果您使用的是Fedora或者Debian的发行版,应该可以从源中安装:

$ sudo yum install steghide

或者

$ sudo apt-get install steghide

在Windows下,您可以从网站sourceforge.net上下载安装EXE文件,其项目主页在这里。0.5.1版的下载链接在这里

2. 使用

如果您使用Linux,安装后在命令行就可以直接输入steghide调用它。在Windows上,您需要解压缩刚才下载到的zip压缩包,找到steghide.exe,然后在开始-运行中输入cmd,启动命令提示符,找到这个程序的位置。

在下面的例子中,假设您在steghide.exe所在目录或者当前目录下有2个文件:

  1. intelligence.txt 是您要发送的情报文件
  2. lena.jpg 是您要隐藏这一情报所用的图片文件

2.1 将情报隐藏到图片的方法

使用如下命令

$ steghide embed -ef intelligence.txt -cf lena.jpg -sf output.jpg

其含义是,将intelligence.txt隐藏到lena.jpg,并将结果输出到output.jpg中。

回车后,会要求您输入加密密码,再次回车确认。然后output.jpg文件就是结果了。

2.2 将情报从图片中提取的方法

使用如下命令

$ steghide extract -sf output.jpg

或者,为了给输出结果指定一个文件名,使用

$ steghide extract -sf output.jpg -xf extracted.bin

回车后,根据需要输入密码。如果密码错误,将不能提取到文件。

使用第一种方法得到的输出结果,将使用隐写时给出的文件名。

练习题

解读如下文件,给出所隐藏的数据。隐写时没有使用密码。

question