0

C#には、バイトをXORまたはNullingすることで破損したいZIPファイルがあります。(Nullingとは、ファイル内のすべてのバイトをゼロにすることを意味します)そのバイトをXORするには、最初にバイトをバイト配列に読み取り、配列内のバイトを何らかの値とXORしてから、ファイルに書き戻す必要があります。

ここで、ファイルのバイトのすべて(または半分)をXOR / Nullにすると破損しますが、一部のバイトをXOR / Nullにすると、最初の数バイト(またはファイルの任意の位置にある任意の数バイト)と言います。 )破損することはありません。つまり、実際には何も起こらなかったかのように、ファイルにアクセスできます。

同じことがmp3ファイルでも起こりました。

ファイルが破損しないのはなぜですか?そして、私がファイルを破壊することができる「速い」方法はありますか?

問題は、私が扱っているzipファイルが大きいため、そのバイトの半分でもXORing/Nullingに数秒かかることです。

よろしくお願いします..:)

4

3 に答える 3

2

すべてのファイルを完全に読み取るだけで、おそらく読み取りエラーが発生します。

ただし、もちろん、何かを「秘密」にしておきたい場合は、暗号化を使用してください。

zipには、小さなヘッダー、ディレクトリ構造(最後)、および個々のファイルの間に含まれます。詳細については、ウィキペディアを参照してください。

最初のバイトを破損すると、ファイルが破損することは確実ですが、非常に簡単に修復することもできます。リーダーは最後にディレクトリブロックを見つけることができません。

最後のブロックを損傷しても同じ効果があります。リーダーはすぐに諦めますが、修復可能です。

途中でバイトを変更すると、1つのファイルが破損します。CRCは失敗します。

于 2012-08-11T13:37:01.923 に答える
1

それはあなたが「破壊」しようとしているファイル形式に依存します。また、ファイルのどの部分を変更しようとしているかによっても異なります。最後に、破損しているかどうかを確認する方法によって異なります。ほとんどのファイル形式には、ある種のエラー検出があります。

あなたに不利に働く他のことは、zipファイル形式が破損のためにCRCアルゴリズムを使用することです。さらに、ディレクトリ構造のコピーが2つあるため、両方を破損する必要があります。

最後にディレクトリ構造を破壊してから、前のバイトの一部を変更することをお勧めします。

于 2012-08-11T13:43:44.980 に答える
0

パスでzipエントリをロックすることもできますが、誰もそれを開いて何が入っているかを確認したくありません。

それはあなたが安全な削除の方法を探しているかのように聞こえます。単に誰かにファイルを読ませたくない場合は、ファイルを削除してください。それ以外の場合は、異なる値で数十回実行したり、複雑なアルゴリズムを100回適用したりするなどの極端なことを行わない限り、形式が「破損」している場合でも、データを読み取る方法はあります。

一方、他の誰かがファイルにアクセスするのを防ぐためにファイルを壊すのは、やり過ぎのように思えます。zipの場合は、それを読み込んで(アーカイブファイルの処理についてはここにたくさんの質問があります)、パスワードで暗号化してから書き戻すことができます。別の種類のファイルの場合、データへのアクセスを暗号化、非表示、またはその他の方法で防止するための、文字通り何百万もの異なる質問と解決策があります。ファイルを壊すことは、ある種のun-zip-corrputing-programまたは同様のものをテストするのに役立つ場合を除いて、あなたがやるべきことではありませんが、あなたのコメントはこれがアクセスを防ぐことであることを暗示しています。おそらく、これを実行したい理由についてもう少し背景があれば、より良い答えを提供するのに役立つでしょうか?

于 2012-08-11T14:06:46.697 に答える