はじめに原則
ファイル構造の情報を隠蔽するための方法は、情報またはブロックデータとブロックサイズとの関係を隠すためにファイル構造のブロック間の関係を使用して、慎重にファイルフォーマットを制御する必要があります。
BMP(ビットマップファイル)グラフィックファイルは、BMP画像ファイルの構造が比較的単純で固定されているWindowsはBMPビットマップ情報の使用は最初の隠れBMPファイルの形式についての詳細を学ぶ必要がある作るために使用する一般的なグラフィックファイル形式です、ファイルのヘッダ情報から、BMPの画像4つのヘッドの部分、及びデータ領域がパレット情報なし24ビットトゥルーカラー画像からなるパレット。24ビットトゥルーカラーのBMPファイルは、3つの部分を含んでいます。最初の部分は、BMPファイルヘッダ(14バイト)です。最初の2つのバイトが「BM」であり、それは、BMPファイルを識別するためのフラグであり、ビットマップの3,4,5,6バイトサイズはバイト単位で、ファイルに保存され、7,8,9 、10のバイトが予約され、0されなければならない、11、12、配列の最初のバイトは、ビットマップ・ファイル・ヘッダに対してオフセット付与され、24ビットトゥルーカラーイメージは、この値は54に固定され、の2ビットマップ情報ヘッダ部(40バイト)。図19は、ピクセル単位で画像ファイルの幅の20のバイト; 23,24,25,26第2バイトはピクセル単位で、画像ファイルの高さを表しています。29バイト、最初のバイト29から出発して、30ビットピクセル、24ビットトゥルーカラービットマップに記載されています。ビットの値が0x18のであり、第3の部分は、データ領域です。で表されるピクセル当たり3バイト、55バイト目から、画素順次の3つのバイトは、赤、緑、青の輝度成分値を表します。
通常の画像表示に影響を与えることなく、情報は、以下の4つの方法を使用して、24ビットトゥルーカラーのBMP画像に隠されてもよいです。
- 任意の長さの画像ファイルにテールデータを追加、データの量を変更するために、ファイルヘッダに格納された秘密情報の尾部は、ファイルヘッダファイルの長さの値を変更するために低減することができます。
- ヘッダおよび実際のビットマップ画像データとの間の隠れたパレットまたはデータ、ヘッダファイルの長さを変更するために必要な最小レベル間の画像データのファイルヘッダ内の秘密データは、スタートオフセットがアドレス、このデータ二つのフィールドの値。
- そして、ヘッダ予約フィールド隠された情報では、ファイルのヘッダー情報を変更します。
- 画像バイトと画像の幅が4の倍数、隠されたデータの補数ビットである必要があり、画素領域の特徴です。
動作環境
Windowsの10オペレーティングシステム
MATLAB 2019aソフトウェアのバージョン
BMP形式の画像ファイル
010編集ツール
プロセス技術
実際の画像データの後の最初の、隠された情報
秘密情報ファイル名hidden.txtを隠すことには、キャリア、キャリアや秘密情報などBaboon.bmpイメージは、コマンドコピーbaboon.bmpは/ B +のWindowsに隠された、MS-DOSモードで実行し、同じディレクトリに配置されます。 TXT /バイナリ形式でパラメータ/ B指定複製、ファイルのマージ、パラメータ/ ASCIIでフォーマットコピーは、ファイルをマージ特徴baboon1.bmp、。新しいbaboon1.bmpファイルを生成するには、コマンドを実行した後、ファイルブラウザの画像閲覧ツールを使用するには、元の画像、テールbaboon.bmpファイルに隠された情報とほぼ同じで見つかりました。構造から理解BMP画像、画像記憶3,4,5,6-全長BMP画像の4バイト。ファイルの実際の長さを比較することによって、この方法隠し情報、ファイル未修飾画像ファイルのバイト長を使用する場合と
ファイル、ファイルの長さを保存し、画像が機密情報を非表示にするかどうかを見つけることができます。
情報隠蔽の写真QftmModify1.bmpの(1)生産
ファイルを作成しますHidden.txt
生産QftmModify1.bmp
コピーQftm.bmp / B + hidden.txt / QftmModify1.bmp
(2)Matlabのスクリプトファイルには、隠された情報の存在を検出するために、
絵QftmModify1.bmpは、ファイルの長さを検出します
CLC; クリア; FID =はfopen( 'QftmModify1.bmp'、 'R&LTは');%は、ベクター内に画像ファイルを読み込み 、[A、長さ] =のfread(FID、INF、 'UINT8');%の長さは、ファイルの実際の長さ FCLOSE (FID); FID =はfopen( 'QftmModify1.bmp'、 'R&LT' ); ステータス = fseek関数(FID、2 'BOF' ); FILEB =のfread(FID ,. 4、 'UINT8' ); FileLength関数 = FILEB(1 (4)* 256 ^ 3% )* 1 + FILEB(2)* 256 + FILEBを(3)* 256 ^ 2 + FILEB 格納された文書画像ファイルの長さ のdiff =長さ- FileLength関数を; %diffは場合隠された長さ情報を表します。同じ、それがどんな情報を隠していないイメージを表します。 FCLOSE(FID)。
差分結果を表示するスクリプトを実行します
修飾すべきファイルヘッダ長BMPファイルが存在しないときに見られる結果から、隠れた画像は差がプレゼンス情報隠し画像を得るために、0に等しくないデフ
ファイルヘッダと画像データと第二の、隠された情報
秘密情報を隠し、データ領域を開始する前に隠された情報をファイルhidden.txt(ファイル全体を非表示)から読み出され、この方法は、画像データの画像データのファイルオフセットと長さを変更することです。
(1)情報を非表示にするMATLABスクリプト
CLC、 クリア、 WM = randsrc(1300、[0 1]);% ランダム透かし生成 FID =はfopen( 'Qftm.bmp'、 'R&LTを');%は、ベクター内に画像ファイルを読み込み 、[A、長さ] =のfread(FID 、INF、 'UINT8' ); FCLOSE(FID); msgfid =のfopen( 'hidden.txt'、 'R&LT');%オープン秘密文書 [MSG、COUNT] = のfread(msgfid); FCLOSE(msgfid); WA = ; J。= 1 ; (WA。11)= 54 +はCOUNT; WA( WA = + 3)(3)COUNT; のための I = 55:54 + COUNT WA(I)を = UINT8(MSG(J ,. 1))。 %隠されたパスワード情報 J = J + 1。; 終了 のため、私は= 55 :長さ WAは(iは +カウント)= (I)。 エンド フィギュア。 WA = UINT8(WA)。 FID =用のfopen( 'watermarked.bmp'、 'WB' )。 fwriteの(FID、WA)。 FCLOSE(FID)。 I =関数imread( 'Qftm.bmp' ); J =関数imread( 'watermarked.bmp' )。 サブプロット( 1,2,1 ) imshowを(I) のタイトル( '未修改图像' ); サブプロット( 1,2,2 ) imshowを(J) タイトル( '修改后图像')
営業結果を表示
解析「watermarked.bmp」16進クリアな視界隠された効果
三、BMPの 隠された情報を検出する画像ファイル
BMP隠し非表示にする画像情報の情報一般にファイルを変更することによって、オフセット画像ファイル内の画像の長さが、BMPの画像ファイル、file_length = biwidth * biBytecount *のbiHeight + bfoffBits、前記biwidth、のbiHeightショー
幅と画像ファイルの高さ、bfoffBitsファイルヘッダは、実際のビットマップ画像データとの間のオフセットを表します。
多層チェックを隠して(1)のMatlabスクリプトのBMP情報
CLC、 クリア、 WM = randsrc(1300、[0 1]);%が ランダム透かし情報生成 FIDは、 fopenを( 'watermarked.bmp'、 'R&LTを')=;%は、ベクター内に画像ファイルを読み込み 、[A、長さ] =のfread( FID、INF、 'UINT8' ); ステータス = fseek関数(FID、2 'BOF' ); FILEB =のfread(FID ,. 4、 'UINT8' ); FileLength関数 = FILEB(1)* 1 + FILEB(2)* 256。 + FILEB(3)* 256 ^ 2 + FILEB(4)* 256 ^ 3% 文書画像の理論上の長さ ステータス = fseek関数(FID、10、 'BOF' ); B =のfread(FID ,. 4、 'UINT8' )。 bfoffbitsmodify = B(1)。1 * + B(2)256 + B×(3)+ B * 2 ^ 256(図4)。3 ^ * 256%の読出オフセット ステータス = fseek関数(FID、18であり、 'BOF' ); B=関数fread(FID ,. 4、 'UINT8' ); biWidth(1)。(3)= B * 1 + B(2)* 256 + B * 256 ^ 2 + B(4)* 256 ^ 3つの ステータス =のfseek(FID 、22であり、 'BOF' ); B =のfread(FID ,. 4、 'UINT8' ); のbiHeight。。。。= B(1)* 1 + B(2)* 256 + B(3)* 256 ^ 2 + B(4) 256 3 ^ * ; bfoffbitsは = 54であり、%はオフセット biBytecount = 3; 24%ビットトゥルーカラー画像3。 filetruelength = biWidth biBytecount * + bfoffbits%のbiHeight 画像実際に真の長さ(固定54をオフセットである) filelengthbfoffbits = biWidth * biBytecount *のbiHeight + bfoffbitsmodify%の長さの計算オフセットファイルを読み出すため FCLOSE(FID); DIFF1 =長FileLength関数;%CHECK1修飾されていない画像の場合長さ DIFF2 = FileLength関数-filetruelength%以下画像の長さを変更する場合はCHECK2 のdiff3 = filelengthbfoffbits filetruelength% - 変性Check3画像がオフセット場合 差分 = DIFF2 +のdiff3 + DIFF1
watermarked.bmp差分の値に基づく情報隠れ画像があるか否かを判断する(ファイル長さおよびファイルオフセットが変更されている)試験のために、操作結果を表示します。
差分の結果から!= 0は、情報隠蔽がある絵で見ることができます。
ヘッダ内の画像ファイルのヘッダ及び予約フィールドにおける第四に、隠された情報
BMP画像ファイル7,8,9,10バイトが予約されているような、決して使用予約バイトの多くは、ありますが、それは最初の7,8,9,10バイト単位で秘密情報を非表示にするには0でなければなりません。
(1)MATLABスクリプトは、予約フィールドまたはBmpの情報を非表示にします
CLC; クリア; FID =はfopen( 'Qftm.bmp'、 'R&LTは');%は、ベクター内に画像ファイルを読み込み 、[A、長さ] =のfread(FID、INF、 'UINT8' ;) FCLOSE(FID); WA = A ; %7,8,9,10予約BMP Qftm秘密情報に隠された単語は0x66 0x74 0x51 0x6dのASCII値 WA( = 81 7); WA( = 102 8); WA( = 1 16 9); WA( 10)= 109 ; 図; WA = UINT8(WA); FID =はfopen( 'watermarkedReserve.bmp'、 'WB' ); fwriteの(FID、WA); FCLOSE(FID); I =関数imread( 'Qftm.bmp' ); J =関数imread(「watermarkedReserve。BMP」); サブプロット( 1,2,1 ) 関数imshow(I) のタイトル( '非修飾画像" ); サブプロット( 1,2,2 ) 関数imshow(J) タイトル( '変更画像」)
解析「watermarkedReserve.bmp」16進クリアな視界隠された効果