12

基本的で最も単純なステガノグラフィーのアルゴリズムと方法は何ですか?

画像に適用されるステガノグラフィーを意味します。

データを画像に隠す単純なプログラムはどのように機能しますか? 主なテクニックは何ですか?プログラムはソース画像なしで画像内の暗号化されたメッセージをどのように認識しますか?

4

3 に答える 3

24

基本的で最も単純なステガノグラフィーのアルゴリズムと方法は何ですか? 画像に適用されるステガノグラフィーを意味します。

私はずっと前にこのためのライブラリを書いたので、プロセスを説明することができます。

基本的に、ファイル形式がある場合は、24 ビット BMP 形式としましょう。まず、そのファイル形式にピクセルを読み書きする方法が必要です。ライブラリを使用するか、ファイル形式が何であるかを理解したら、独自に作成することができます。

画像は、一連のピクセルとして見ることができます。4x4 ピクセルの画像を考えてみましょう。

xxxx
xxxx
xxxx
xxxx

これらのピクセルに 1 から 16 までの番号を付けます。

01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16

上記の番号が付けられた各ピクセルには、赤の成分、緑の成分、および青の成分があります。これらの各コンポーネントはそれぞれ 1 バイトであるため、各コンポーネントは 0 ~ 255 の値として見ることができます (24 ビット = 赤は 8 ビット、緑は 8 ビット、青は 8 ビット)。したがって、上記の各数値には、0 から 255 までの 3 つの値のセットがあります。

したがって、上記の 4x4 画像の例では、合計 16 ピクセル * 3color_components = 48 バイトのデータが画像に含まれます。通常、各色コンポーネントの最下位ビットのみを使用して画像をエンコードします。この場合、48 ビットのデータを利用できます = 6 バイトを利用して、必要な 6 バイトのメッセージをエンコードできます。

これを簡単にするために、単純な 3 ビット メッセージを 1 つのピクセルにエンコードする方法を見てみましょう。そして、色成分ごとに 1 ビットしか使用していないと仮定しましょう。3 ビットのメッセージをエンコードしたいとしましょう: 111

データをエンコードする前の上記のピクセル 1の値の例を次に示します。

R: 10101011
G: 11111010
B: 00011010

あなたがすることは、最下位ビットだけを新しいデータに変更することです:

R: 1010101 1
G: 1111101 1
B: 0001101 1

ピクセルは人間の目には同じように見えますが、エンコードしたいデータを表すために最下位ビットを使用しています。

3 ビットを超えるデータを 1 つのピクセルにエンコードする場合は、それも可能です。何が起こるかというと、最下位ビットだけでなく、最下位 2 ビット、または最下位 3 ビットなどを使用してエンコードすることになります。使用するビットが多いほど、画質。ただし、最大 7 ビットを使用でき、画像は認識可能に見えます。

通常、エンコードしたいデータは 3 ビットをはるかに超えます。エンコードするデータが多いほど、より多くのピクセルを使用するか、より多くのビット/ピクセルを使用してデータをエンコードする必要があります。エンコードしたい 9 ビットのデータがあるとします。最下位ビットのみを使用している場合、その情報をエンコードするには 3 ピクセルが必要です。ただし、1 ピクセルのみを使用する場合は、カラー コンポーネントごとに最下位 3 ビットを使用してそのデータをエンコードします。

この種の作業を行うには、ビットごとの演算子を常に処理する複雑さを抽象化して、データのビットを簡単に処理するための関数を作成する必要があります。

手法はファイル形式によって異なりますが、概念は同じです。ステガノグラフィーは、GIF 拡張ブロックなどでデータを非表示にすることだけを指す場合もあります。通常は、画像のピクセルを変更するか、一部のファイル形式ではカラー ルックアップ テーブルを使用して非表示にします。

一部の画像ではヘッダーにカラー ルックアップ テーブルがあり、ピクセルはそれらのカラー ルックアップ テーブルのインデックスになります。できることは、カラールックアップテーブルを並べ替えて、最も類似した色が近くにあるようにすることです。次に、カラールックアップテーブル自体とピクセルのインデックスの両方にデータをエンコードできます。ルックアップ テーブルは類似性に従って並べられているため、インデックスが多少変化しても問題にならないからです。

ただし、この種の作業を行うには、ファイル形式を理解する必要があります。または、少なくともファイル形式とファイル データを操作できるライブラリを使用している。このトピックに本当に興味がある場合は、BMP のような単純なファイル形式から始めて学習することをお勧めします。ファイル形式の仕様は、 www.wotsit.orgなどのサイトでいつでも見つけることができます。

プログラムはソース画像なしで画像内の暗号化されたメッセージをどのように認識しますか?

あなたは正しいです。情報をデコードするプログラムは、ソース イメージを必要としません。これがどのように機能するかは、単純に逆のことです。プログラムは、使用してエンコードしたデータのビット数を知り、同じものを使用してデコードする必要があります。各ピクセルを反復処理し、ビットをバイトに結合して、それらのバイトをファイルに書き出します。

于 2010-06-10T20:20:52.823 に答える
4

ビットマップ ピクセルの最下位ビットの変更。

素晴らしい概要については、このページを参照してください

于 2010-06-10T20:12:33.730 に答える
2

画像に情報を隠す方法は文字通り無限にあります。

簡単な方法の 1 つは、各 RGB 値の最下位ビットを変更しても顕著な違いが生じないことに注意することです。そのため、画像内のすべてのバイトの最下位ビットを設定すると、(#-bits-in-image / 8)隠しデータを格納するビットが得られます。

于 2010-06-10T20:15:13.783 に答える