2011-02-03 46 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讀取的唯一方法是在評論中。

相關問題