JPEGは不可逆圧縮なので、埋め込みファイルが壊れてしまう可能性はあります。しかし、PNGはDeflateに似た圧縮方法を使用しますが、これは無駄です。
私はこのようなプログラムを作成し始めました。アイデアは、データのバイトをピクセルのカラーチャネルの最下位ビットに分割することによってデータのバイトを隠すことでした。いくつか例を挙げてみましょう。
RGB-8イメージは、赤、緑、青の3バイトのピクセルを表します。赤いチャンネルに3ビット、緑色に2色(人間の目は緑色に敏感です)、3色は青色に保存されます。だから私はピクセルあたり1バイトを埋め込みます。 RGBA-8画像と同様に、私は2-2-2-2を行います。もちろんこれにはビット単位の操作が含まれます。
RGB(A)-16画像では、チャンネルあたり2バイトのものが面白くなります。私は最小の歪み(最悪の場合255/65535 =〜3.9%)で各チャンネルの最下位バイト全体を使用し、ピクセルあたり3または4バイトのデータを保存します。悪くない!! さらに、この場合複雑なビット単位の操作はなく、単一の割り当てがジョブを行います。
多くの改善点があります。私は、ユーザーにパスワードを尋ね、それをハッシュし、安全な擬似乱数ジェネレータをシードし、ピクセル単位で移動させず、代わりにジェネレータに新しいランダムインデックスを要求すると考えました。
このソリューションの欠点は、ジェネレータがますます占有されるインデックスを提供するため、より多くのデータが既に埋め込まれているほど遅くなることです。しかし、この方法ではるかに安全です。さらに安全にするために、真のデータの位置を隠すために、ノイズのないデータにノイズデータを導入することを考えました。
ご覧のとおり、PNG画像ではたくさんのことができます。あなたが興味を持っているなら、私が今までに書いたコードを与えることができます。
この記事によると、電子メールなどで送信されたときにデータが失われるというイメージコードを修正したように見えます。これまでの質問の1つで、イメージをNSDataに格納し、セパレータ文字列を使用してNSDataの内側に2番目のイメージを追加して保存します。これは私のデバイスで動作し、私は彼らに電子メールを送ったりテキストを書いたりするまで、両方の画像を読むことができました。電子メールとテキストで、私が追加したデータが削除され、元のイメージだけが残されました。どのようにそれを回避するための任意のアイデアですか? – SolidSnake4444
追加が画像フォーマットで定義されていないため、2番目の画像を追加すると機能しません。また、変換は無視されるか、チョークされます。特定のイメージフォーマットでは、 "情報"データ(コメントフィールドJPGなど)を埋め込むことができます。それ以外の場合は、何らかのステガノグラフィーを使用する必要があります。 –
@ SolidSnake4444この場合、唯一のアイデアは、他のイメージにイメージ自体を保存するのではなく、デバイス上の秘密イメージの場所や識別子を保存することです(そして、何らかの形でデバイス自体の秘密イメージを非表示にします)。その後、他のシステムに画像を送信すると、実際には秘密の画像は伝送されません。もちろん、これはステガノグラフィを排除するものではありません。 –