強力なPNGデータ暗号化

おはようございます。 昨日、ソーシャルネットワークを介したハッシュステガノグラフィに関する記事を読みましたが 、出力量の観点からより最適なものを作成することができました。 ( 概念 実証のromabibiとは異なり)多かれ少なかれ効率的で最適化されていることが判明したため、 約束どおり 、私は記事を書いています。



さて、もう一度挨拶してください: 、そして猫へようこそ。



このアイデアをできるだけ簡潔に実装することにしたので、暗号化アルゴリズムについて簡単に説明します。



  1. 16の倍数へのキーの適合(AES暗号化の場合)
  2. zlibを使用してソースデータを圧縮する
  3. 16の倍数の長さに適合し、圧縮データを暗号化する
  4. 暗号化されたデータを再圧縮する
  5. 復号化中に比較するために暗号化キーからMD5ハッシュを計算します
  6. データセパレーターおよびホワイト(文字通り)ノイズとして使用されるテキストの行にない最小量の「\ 0」を見つける
  7. グレースケール画像を準備し、ランダムなデータで塗りつぶします
  8. ノイズを介してライン(data_length + MD5_key_length + MD5_key + data)を記録する


行(バイト単位)は、画像の左上隅の正方形に書き込まれ、ホワイトノイズとマージされます。 結果は、ある種のテクスチャのようなものになります-たとえば、ゲームMinecraftの石です。 自分で判断する:







もちろん、これが暗号であることを理解することは難しくありませんが、アルゴリズムがなければ、解読するのはそれほど簡単ではありません(結局、AESキーが必要であり、全員がプレフィックスと二重圧縮を使用する形式を使用するわけではありません)。






さて、写真が撮れました。 彼女と今どうする? もちろん、受信者に送信します。 確かに、キーと復号化のアルゴリズム(またはスクリプト)を事前に知っている必要があります。 そして、1つの「しかし」ではないにしても、すべてが良いでしょう。 そして、この「しかし」は圧縮です。



明らかに、元のソーシャル画像を保持します。 ネットワークは有益ではありません。 たとえば、VKは、最小の圧縮率ではなく、PNGをJPGに変換します。 また、特定のバイト値(0〜255)を使用しているため、それらの損失は何の改善にもつながりません。 解決策は、受信した画像をドキュメント(ファイル)として送信することです。






デプロイされたスクリプトを例外を含めて101行にロールアップし、stderrで進行状況とランタイムを表示しました。 リポジトリいつでも見つけることができます 。 おそらく、私は徐々にそれを改良していきますが、近年、私は十分なプロジェクト(嫌がらせを含むものを含む)と離婚しました。



確かに、この記事(解説から発展した)は使い果たされたと思います。 他のアルゴリズムの提案を聞いてうれしく思います。同じスクリプトに追加することで、あなたのためにそれらを有用にコーディングします。



このアイデアをありがとうございました。 アディオス。



All Articles