2011-02-03 45 views
2

我创建了一个程序,可以在JPEG结尾“隐藏”加密文件。问题是,当再次检索这个加密文件时,我需要能够确定它存储在何处的JPEG结束。起初,我认为这不会是一个问题,因为我可以通过文件检查0xFF和0xD9,JPEG用来结束图像的字节。然而......我注意到在很多JPEG中,这个字节组合是而不是独占......所以我的程序认为图像已经随机结束了一半。确定JPEG结束(与另一个文件合并时)

我在想,必须有一种方式来表达一个JPEG已经完成,否则我加入一个字节的负载到文件的末尾将显然会损坏它...有没有一种实际的方法来做到这一点?

+1

有很多更好的方法来实现[steganography](http://en.wikipedia.org/wiki/Steganography)。例如,使用所提出的方法,当“grep”运行时,“隐藏”数据将显示出来。 – 2011-02-03 23:37:01

回答

0

嘛,总会有文件在两个地方,你可以用100%的可靠性找到。开始和结束。因此,当您添加隐藏文件时,请添加另一个 4个字节,用于存储文件的原始长度和始终不同的特殊签名。当读回来时,首先寻找结尾 - 8并阅读那个长度和签名。然后只是寻求那个位置。

1
+0

虽然阅读大大增加了我对JPEG FIF的理解 - 但我真的不知道如何使用它来解决我的问题?除非你的意思是第一个0xFF 0xD9是因为缩略图的末尾,所以我可以检查缩略图是否存在,如果是的话,两次运行该函数? – 2011-02-03 20:00:37

+0

其实我的链接是错误的。我认为搜索一个字节序列是绝对错误的,它可能在原始数据的中间。您应该知道这些字节代表什么,解码标题并提取原始数据的大小。 – Benoit 2011-02-03 20:17:56

0

您很可能会碰到标题中的缩略图,在浏览文件时,您应该会发现大多数标记的段包含长度指示符,here是一个参考文件,其中“do”和“not”都是参考文件。您可以跳过这些段中的字节,因为真正的eoi标记不在其中。

在实际的jpeg压缩数据中,任何FF字节应该跟随00(零字节然后被丢弃),或者由FE标记注释(其具有长度指示符,并且可以如上所述跳过)。
理论上,在压缩数据中遇到错误的eoi读取的唯一方法是在评论中。

相关问题