1

オブジェクトに関する情報を含むファイルがあるとします。ファイル名自体に、オブジェクト ID、オブジェクトの親 ID、その他のメタ ID 情報、ファイル シーケンス番号などのオブジェクトに関する特定の情報が含まれるように、名前を付けて作成します。これは、ファイルがさまざまなモジュールで利用可能であり、ファイルのメタ情報に対する複数のデータベース アクセスを回避するために行われます。

ファイル名 = "OB"+fileId+parentId+metaId+sequence+".txt"

シーケンスは 00001 から 99999 まで (非常に大きくなる可能性もあります)

したがって、各インデックスの各桁には特定の意味があります

現在、ファイル情報はアプリケーション外のプログラムで利用できるようになっていますが、他のアプリケーションに私が使用する詳細を知られたくないので、ファイルを送信する前にファイル名の暗号化またはハッシュを使用することを考えています。ファイル内の応答ファイル名も暗号化またはハッシュ化されており、ファイルの内容に基づいて暗号化/ハッシュ化された応答ファイル名で応答を送信します

2つの課題があります:

  1. データベースを使用せずにこれを行うための最速かつ最も簡単な方法

  2. ファイル名は約 25 文字 (他の ID とシーケンス情報を含む) と長いので、結果のファイル名を小さく (できるだけ小さく) 標準サイズにする必要があります。

または、使用できる代替メカニズム???

4

1 に答える 1

1

オプション 1 ハッシュ

SHA-256 や SHA-128 などの暗号化ハッシュ アルゴリズムを使用すると、ファイル名が長くなります。一意であることはかなり保証されますが、それを保証するものは何もありません (すべてのハッシュ アルゴリズムは誕生日のパラドックスに悩まされます)。

SHA-256 または SHA-128 が一意のファイル名を生成することを保証するものは何もないため、必要なセキュリティのレベルによっては、Adler32 を確認することをお勧めします。このアルゴリズムは、SHA ファミリーほど安全ではありません。主な理由は、結果として得られるハッシュ サイズが非常に小さいため、ブルート フォース攻撃を非常に簡単に実行できるからです。ただし、Adler32 はファイル名の難読化を提供できます。

Alder32 の結果として得られるハッシュ サイズは小さい (32 ビット) ため、衝突の可能性は SHA ファミリーよりもはるかに高くなります。そのため、ファイル名とそれに対応するハッシュ値 (およびこの場合または SHA の場合に推奨されます)。そのテーブルはキャッシュに保存された単純なリストである可能性がありますが、主な理由は、衝突が発生した場合、新しいハッシュを計算するために値を変更する必要があるためです。

オプション 2 暗号化

暗号化によってデータが小さくなることはなく、せいぜい同じサイズになります (データ サイズがアルゴリズムのブロック サイズで割り切れる場合)。ただし、暗号化された値のテーブルを維持する必要なく、すべてのデータを保持します。ハッシュではなく暗号化を使用することにした場合、私は AES を使用しますが、それが最近の標準であること以外の理由はありません。ファイル名の暗号化は非常に少量のデータであるため、おそらくアルゴリズム間の違いに気付かないでしょうが、十分に偏執的である場合は、Intel CPU のAES 命令セットを調べることができます。

于 2012-12-24T09:00:10.387 に答える