2

バイナリ ファイルを作成し、そこに文字列データを格納したいので、次のサンプルを使用しました。

FileStream fs = new FileStream("c:\\test.data", FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(Encoding.ASCII.GetBytes("david stein"));
bw.Close();

しかし、このサンプルで作成したファイル (test.data) をメモ帳で開くと、文字列データ ("david stein") が含まれています。結果が文字列の場合、このバイナリ書き込みとテキスト書き込みの違いは何ですか? ?

ユーザーがメモ帳でデータを開いて読み取ることができなくなるまで、バイナリファイルでデータを作成しようとしています。ユーザーがメモ帳でデータを開くと、実際のバイナリデータが表示されます。

一部のファイルでは、テーマをテキスト エディターで開いたときに、jpg ファイルのコンテンツなどのファイル コンテンツを読み取ることができず、暗号化方法を使用していません。

4

2 に答える 2

8

今私の質問は、結果が文字列の場合、このバイナリ書き込みとテキスト書き込みの違いは何ですか?

ファイル内のデータは常に「一連のバイト」です。この場合、書き込んだ一連のバイトは、ASCII エンコーディングで「テキスト 'david stein' を表すバイト」です。はい、 ASCII と互換性のある方法でバイトをテキストとして解釈しようとするエディターでファイルを開くと、「david stein」というテキストが表示されます。ただし、実際にはバイトの負荷にすぎません。すべては、それらをどのように解釈するかに依存します。

あなたが書いた場合:

File.WriteAllText("c:\\test.data", "david stein", Encoding.ASCII);

まったく同じバイトシーケンスになってしまいます。同じバイトを含むファイルを作成する方法はいくつもあります。File.WriteAllTextファイルをテキストとして「マーク」する方法や、ファイルをバイナリとしてマークする方法については何もありませFileStreamBinaryWriter

編集:コメントから:

ユーザーがメモ帳でデータを開いて読み取ることができなくなるまで、バイナリファイルでデータを作成しようとしています

まあ、さまざまなレベルのセキュリティでそれを行う方法はたくさんあります。理想的には、何らかの暗号化が必要ですが、データを読み取るコードも暗号化を解除できる必要があります。つまり、キーを取得できる必要があります。次に、「キーを保存するにはどうすればよいですか」という質問に移ります。

ファイル内のデータを検証するだけでよい場合(たとえば、他の場所のデータと一致することを確認する場合) は、代わりに暗号化ハッシュを使用できます。

最もカジュアルなスヌーパーを防ぐ必要があるだけの場合は、基本的に単なる難読化である何かを使用できます。これは、「キー」自体を持たない非常に弱い形式の暗号化です。その場合、コードをコンパイルした人は誰でも簡単にデータを取得できますが、それについてはあまり気にしないかもしれません。

それはすべてあなたの要件に依存します。

于 2012-09-11T13:06:33.627 に答える
1

すべてのデータはバイナリです。テキスト ファイルは、有効な文字を表す限定されたサブセットであるバイナリ データですが、それでもバイナリです。

テキスト エディターが通常、テキスト ファイルとバイナリ ファイルを区別する方法は、ファイルの特定の部分をスキャンしてゼロ値 ( \0. これらはテキストのみのファイルには存在せず、ほとんどの場合バイナリ ファイルに存在します。

于 2012-09-11T13:07:35.833 に答える