ファイル (xls、csv、xml) からデータをインポートすると、複雑なインメモリ オブジェクト グラフが生成されます。ここで、このグラフがエクスポートされてから変更されたかどうかを知る必要があります。これを確認する安全な方法は何ですか?ファイルと一緒にハッシュコードをエクスポートすると思いますか?もしそうなら、オブジェクトのハッシュコードを生成する標準的な方法で十分でしょうか? ハッシュはどのように生成すればよいですか? 実際のストリーム/ファイルではなく、オブジェクト グラフでハッシュを生成することをお勧めします。
3 に答える
データを暗号化するかハッシュコードを使用することで、誰もデータを変更しないようにすることができます。あなたが言及したテキストベースのフォーマットの場合、人間の可読性が失われるため、ハッシュコードを好むと思います。
標準のハッシュ方法を適用できるかどうかは、正確に「安全」と見なすものに大きく依存します。データの保存/転送時にハードウェアエラーがなかったことを確認したい場合、またはデータを変更した人の単純な変更を検出したい場合彼が何をしているのかわからなくても、それで問題ないかもしれません - 適切な GetHashCode() 関数を使用していることを確認していれば。「攻撃者」からデータを保護したい場合、私は 32 ビットの「自作」ハッシュに頼りません。(特に、「攻撃者」がコードを知っている可能性がある場合、たとえばオープン ソース プロジェクトで)。
そのような場合、私は MD5 (あまり衝突安全ではない) またはより良いSHA-2 のようなより強力なハッシュ関数を好みます。これらは、データ (XML など) 自体または .net シリアル化されたデータ (ファイルのデータ形式からハッシュを独立させる) をハッシュする必要があるバイト ストリームで機能します。.net はこれらのアルゴリズムのクラスを提供します。たとえば、http://msdn.microsoft.com/de-de/library/system.security.cryptography.hmacsha256.aspxを参照してください。
私は最終的に次のことをしました(これはかなりうまくいくようです):
- このアルゴリズムを使用して、単一オブジェクトのすべての単純なプロパティを含むカスタム整数ハッシュコードを作成します。
- このオブジェクトが参照するすべての複合オブジェクトに対して、1. を繰り返します。
- すべての整数ハッシュコードを既知の順序で 1 つのバイナリ ストリームにシリアル化する
- このストリームの MD5 チェックサムを作成します