5

ファイルの入力ストリームを読み取り、パスワードに基づいてバイト数を変更して暗号化し、新しい暗号化ファイルを作成するプログラムをJavaで作成しています。

例:
次の単語を含むテスト ファイルを作成しました:
This is a test to see if the encrypter project works.
Java でバイトを読み取ると、次のようになります:
[84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 116, 101, 115, 116, 32, 116, 111, 32, 115, 101, 101, 32, 105, 102, 32, 116, 104, 101, 32, 101, 110, 99, 114, 121, 112, 116, 101, 114, 32, 112, 114, 111, 106, 101, 99, 116, 32, 119, 111, 114, 107, 115, 46, 10]
次に、各バイトの値を取得し、パスワードの Unicode 値を減算し、その絶対値を取得します。 . 次に、それをファイルに書き込みます。

私はそれを暗号化するためにさまざまなアルゴリズムをいじっており、テスト テキスト ファイルでテストを開始しました。私は Linux を使用しているので、ファイル拡張子 (.txt、.pdf など) はありません。数回暗号化した後、コンピューターがテキスト ファイルとして認識しなくなったことに気付きました。 、画像ファイルとして!(つまり、クリックすると、デフォルトで、画像エディターでファイルを開こうとします)

だからここに私の質問があります:

1. コンピュータがファイルを特定のファイル タイプとして認識する原因は何ですか?

  • ファイルのどこかで見ている特定のバイトと関係があると推測していますが、それ以上はわかりません。

2. この情報はファイルのどこに保存されますか?

  • 暗号化しても同じファイルタイプのままでいいと思っていたので、例えばファイルタイプの情報が最初の10バイトにあれば、それ以降は全部暗号化しようと思っていたのですが、ただし、たとえば最初の 10 バイトはそのままにしておきます。

3. ファイルタイプ情報は標準ですか?

  • これらのバイトには、すべてのプラットフォームで標準的な意味がありますか (つまり、pdf ファイルは、使用するコンピューターに関係なく pdf ファイルです。それは.pdf拡張子によるものですか、それとも、ファイルのどこかにあるバイトによるものですか)。ファイル。)

4. ファイル内のバイトによってファイル タイプが認識されると仮定すると、ファイル タイプを変更するにはどうすればよいですか?

  • ファイル内のバイトの意味のリストはどこにありますか?
4

2 に答える 2

4

従来の UNIX システムでは、ファイルに現れる特定のバイト パターンを探すことによってのみファイルが識別されます。

このfileコマンドは、 これらのバイト パターンを定義する規則を含むmagic構成ファイル (多くの場合/etc/magic、または) を使用します。/usr/share/file/magic

それだけです - 特別な余分なメタデータはありません - すべてコンテンツの分析によって行われます。

于 2012-04-12T21:07:51.137 に答える
2

通常、ファイルの最初の数バイト内にあります。

ウィキペディアから:

内部メタデータ
ファイル形式を識別する 2 つ目の方法は、形式に関する情報をファイル自体に保存することです。通常、このような情報は、ファイル内の固定された特定の場所に配置された、1 つ (または複数) のバイナリ文字列、タグ付きテキスト、または未加工のテキストに書き込まれます。それらを見つけるのに最も簡単な場所は先頭にあるため、そのような領域は通常、数バイトを超える場合はファイルヘッダーと呼ばれ、数バイトの長さの場合はマジックナンバーと呼ばれます。

ファイルタイプは必ずしも最初の数バイトに格納されるわけではありませんが、他の場所に格納できます

ファイル ヘッダーに含まれるメタデータは、必ずしも最初だけに格納されるとは限りませんが、他の領域にも存在する可能性があり、多くの場合、ファイルの末尾を含みます。ファイル形式または含まれるデータの種類によって異なります。文字ベース (テキスト) ファイルには文字ベースの人間が読めるヘッダーがありますが、バイナリ形式は通常バイナリ ヘッダーを備えていますが、これはルールではありません: 人間が読めるファイル ヘッダーはより多くのバイトを必要とする場合がありますが、単純なテキストまたは16 進エディタ。ファイル ヘッダーには、アルゴリズムがファイル形式のみを識別するために必要な情報だけでなく、ファイルとその内容に関する実際のメタデータも含まれる場合があります。たとえば、ほとんどの画像ファイル形式には、画像サイズ、解像度、色空間/形式に関する情報、および必要に応じて、誰が、いつ、どこで作成したかなどのその他のオーサリング情報が保存されます。どのカメラのモデルと撮​​影パラメータ (存在する場合は、Exif を参照) など。このようなメタデータは、ロード プロセス中とその後の両方でファイルを読み取ったり解釈したりするプログラムによって使用される場合がありますが、オペレーティング システムによって使用され、すべてをメモリにロードすることなく、ファイル自体に関する情報をすばやく取得することもできます。

ファイル内にファイルタイプを保存する別の方法は、マジックナンバーを使用することです

多くの場合、Unix とその派生物に関連するこのようなメタデータを組み込む 1 つの方法は、ファイル自体に「マジック ナンバー」を格納することです。もともと、この用語はファイルの先頭にある特定の 2 バイト識別子のセットに使用されていましたが、デコードされていないバイナリ シーケンスは数値と見なすことができるため、それを一意に区別するファイル形式の任意の機能を識別に使用できます。 . たとえば、GIF 画像は、準拠する標準に応じて、常に GIF87a または GIF89a のいずれかの ASCII 表現で始まります。多くのファイル タイプ、特にプレーン テキスト ファイルは、この方法では見つけにくいものです。たとえば、HTML ファイルは文字列 (大文字と小文字は区別されません) で始まるか、または次の文字列で始まる適切なドキュメント タイプ定義で始まります。


ファイルタイプは、ファイル内に保存する必要さえありません。他の方法には、ファイル名拡張子または外部メタデータさえ含まれます

ファイルの形式を保存する最後の方法は、ファイル自体ではなく、ファイル システムに形式に関する情報を明示的に保存することです。このアプローチでは、メタデータをメイン データと名前の両方から分離しますが、フォーマットをファイル システムからファイル システムに変換する必要があるため、ファイル拡張子や「マジック ナンバー」よりも移植性が低くなります。これは、ファイル名の拡張子についてもある程度当てはまりますが (たとえば、MS-DOS の 3 文字制限との互換性のため)、ほとんどの形式のストレージでは、ファイルのデータと名前の定義はほぼ同じですが、それ以上の表現はさまざまであるか、まったくありません。メタデータ。

他にもたくさんの方法がありますが、これらは最も一般的な傾向があります。

于 2012-04-23T04:11:53.733 に答える