- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルの正しさ)
巨大なファイルの正しさを確認する方法とは?
このQ&Aのポイント
- 巨大なファイルをダウンロードし終えて確認したとき、MD5が違っている場合、どこが間違っているか確認する方法はあるのか?
- 巨大なファイルの場合、間違っている部分だけダウンロードすることで修正する方法があるのだろうか?
- 金子さんが作成したファイル共有ソフトは、接続が切れた部分の位置を覚えておいてその辺をダウンロードしなおすことで対応しているのか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず、MD5に関しては、MD5から元のファイルの内容そのものを復元することは不可能です。(MD5の場合の数が、この世に存在する可能性のあるすべての場合の数より小さいので、必ずMD5が同じファイルが存在するからです。) そして、MD5が違ったときに、どこが違うのかを推測することも不可能ということになっています。 これが可能なようだと、同じMD5で自分の気に入るようにファイルを改ざんすることが可能である可能性が出てきます。もちろんこれが可能なら、MD5をチェックする意味が無くなります。 さて、独自にプロトコルを作成して、ファイルの検証を行うのであれば、ある程度の訂正可能な誤りビットを作成することは可能です。たとえば、ファイル全体を正方形の表にして、縦と横の各列のビットで1の数が偶数か奇数かを記録しておくとします。(これをパリティビットといいます。)この方法では、同じ行と列に複数の誤りがないと仮定すれば、誤りの場所を特定することができます。 他にも誤りを訂正できる検査ビットを付け加える方式は多数あります。 また、単に接続が切れてしまっただけであれば、最初にファイルの大きさを確認しておいて、途中で切れたと判断したら、その続きから読むと言うことも可能ですね。 かのソフトは、プロトコルそのものを完全に独自に定義していますから、一般にHTTPやFTPではできないこともできるようになっています。(というか、そのようにプロトコルが設計されています。)
お礼
おお!なるほど、すごく納得です。では大きいファイルを HTTPでダウンロードするときなどには無理ということなのですね。 HTTPも普及してるわりには、意外に駄目ですね。これからの時代 多少冗長でも大きなファイルを転送するときはチェックできるように したほうがよいかなとか思ってしまいます。 そういう意味ではやはりかのソフトは設計の段階からも 大したソフトなのですね。よく理解することができました。 あでも、httpはどんなファイルが転送されるか分からないから 最低限の機能を提供してるのかな・・?確かにエラー訂正で 冗長になっているファイルにさらにエラー訂正加えても意味ないですよね・・。う~ん エラー訂正についてはどんなのがあるかもうちょっと調べてみたいと思います。 丁寧に教えていただいてありがとうございました!