JPGファイルにデータを保存する方法

JPGファイルにデータを保存する方法

XAMLベースのさまざまなプラットフォーム、クロスプラットフォーム戦略、効果的なプロジェクトアーキテクチャ設計に必要なコアテクノロジーについて深く掘り下げました。

最后更新 2024/11/11 6:58
zhaotianff
预计阅读 2 分钟
分类
.NET
标签
.NET C# 建築設計の構造 ステガノグラフィーデータ

概要:概要

最近、リソースマネージャのバックグラウンド機能を行うとき、DLLに情報を渡す必要があります。

主に、画像の適合性、透明度などを含むいくつかの比較的単純なパラメータを渡すことです。コミュニケーションの様々な方法がありますが、結局のところ、練習の機能であり、以前に使用したことのない方法を見つけたいです。

前回の記事では、画像ファイルにデータを埋め込む2つの方法を紹介しました。

https://www.cnblogs.com/zhaotianff/p/17222056.html

そこで、ここでも画像ファイルに直接データを書き込み、DLLで読み込みたいと思います。

インターネットで調べたところ、JPGファイルに自分のデータを書き込む簡単な方法があります。

また、理論は無制限のサイズのデータを書き込むことができます。

余談ですが、ファイルの形式に関係なく、標準的なフォーマットがあります。一般的には、ファイルヘッダ、ファイル本体などが含まれ、ファイル構造に精通した後、元のファイル構造を破壊することなく、ファイルヘッダに独自のデータを書き込みたい場合は、理論的には実現可能です。

しかし、プロセスには時間がかかります。

我这里是直接使用了NVISO Labs 现有的方式,给有需要的小伙伴做一个分享。

実装の原理

まず、通常のJPGファイルを16進エディタで開きます。

最初の2バイトは **FF D 8 ** です。

FF D8 => ** これはJPEGデータストリームの開始を示すフラグである **

JPEGデータストリームの開始タグを見つけたら、その後ろに“コメント”タグを挿入します。

FF FE =>** これは“コメント”マークであり、JPEGデコーダでも無視されます。これらのマーカーは、データを挿入し、有効な画像を保持する方法です **

FF FEの後に2バイトが続き、コメントの内容のサイズを表します。

例:サンプル

JPGファイルに HelloWorld を書き込むとします。“HelloWorld”は10バイトなので、FF FE の後に書きます。

00 0A(10バイト)48 65 6C 6C 6F 57 6F 72 6C 64

ここでは合計14バイトで、**FF FE 2バイト *** のヘッダ ** 00 0 A 2バイト *** のサイズと **10バイト ** の内容が含まれています。

そこで、16進エディタを使用して **FF D 8 ** の後に14バイトを挿入します。

次に、以下のようにデータを入力する。

保存後もJPGファイルは正常に開く

** コードの実装 **

C#を例にとると、他の言語でも同じように実装されていますが、ここでは不透明度とstrechデータを書き込みます。

private void WriteImageInfoToFile(string filePath,double opacity,int stretch)
   {
       //读取文件数据
       var buffer = System.IO.File.ReadAllBytes(filePath);

       //判断是否是JPG文件
       if (buffer[0] == 0xFF && buffer[1] == 0xD8)
       {
           //将原始数据扩容6个字节
           var newBuffer = new byte[buffer.Length + 6];

           //拷贝JPG文件开始标记 FF D8
           Array.Copy(buffer, 0, newBuffer, 0, 2);

           //设置数据
           //注释标记
           newBuffer[2] = 0xFF;
           newBuffer[3] = 0xFE;
           //大小 0x02
           newBuffer[4] = 0;
           newBuffer[5] = 0x02;
           //数据
           newBuffer[6] = (byte)nOpacity;
           newBuffer[7] = (byte)stretch;

           //将原图片剩下的数据拷贝到新buffer中
           Array.Copy(buffer, 2, newBuffer, 7, buffer.Length - 2);

           //写入文件
           System.IO.File.WriteAllBytes(filePath, newBuffer);
       }
   }

読むときは、同じルールで読むだけです。

リファレンス·リソース

https://blog.nviso.eu/2020/07/13/how-to-embed-secret-data-in-jpeg-files/

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2026/04/22

バージョン別の. NETサポート状況(250 7 0 7更新)

仮想マシンとテストマシンを使用して、各バージョンのオペレーティングシステムの. NETサポートをテストします。オペレーティングシステムのインストール後、対応するランタイムを測定し、スターダストエージェントをパスとして実行できます。

继续阅读
同分类 / 同标签 2026/02/07

AOTの使用経験

プロジェクトの最初から、新しい機能が追加されたり、新しい構文が使用されたりするたびに、AOTリリーステストを行うという良い習慣を身につける必要があります。

继续阅读