WinRarのリカバリーレコードはどういうアルゴリズムでデータの破損を修復しているんですか?;参考になる資料があれば教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:inagaki_hisato No.1

回答回数884ベストアンサー獲得回数0

ポイント10pt

リカバリレコードのサイズや書庫サイズあたりの数が示してありました。

ちょっとこれじゃ物足りないでしょうねエ・・・もともとシェアウエアだから、詳細は公開されていないのでしょうか?

id:TG-IF

うーん、もっと情報が欲しいですねぇ。

WinRarの作者さんは多分既存のアルゴリズムを元に

リカバリーレコードの機能をつけたような気がするんですが、どうなんでしょう。

2004/02/22 23:53:35
id:kanetetu No.2

回答回数2199ベストアンサー獲得回数11

ポイント1pt

ここの議論が参考になると思います。

id:TG-IF

具体的にはどこの辺りが参考になるんでしょう。

2004/02/22 23:56:04
id:DenGaX No.3

回答回数32ベストアンサー獲得回数0

ポイント60pt

http://www.hatena.ne.jp/1077454676#

WinRarのリカバリーレコードはどういうアルゴリズムでデータの破損を修復しているんですか?;参考になる資料があれば教えてください。.. - 人力検索はてな

URLはダミーです。

わかりやすく1ブロック=256バイトで説明します。ファイル全体のブロックごとのCRCをチェックサムとして付加します。これで、どこの部分のブロックが壊れているかを照合することが出来るはずです。

具体的なリカバリレコードはブロックごとのそれぞれの位置のデータを全てXORした値を格納します。たとえば、3ブロックあるデータのそれぞれの1バイト目が、00,ff,35だと、0x00^0xff^0x35で0xCAがリカバリレコードの1バイト目になります。

この状態で2ブロック目の1バイト目が0x7fになっていたとしましょう。

修復するときには、既にどのブロックが破損しているかはわかっているので、リカバリレコードの0xCAに対して、1ブロック目と3ブロック目のデータをxorします。

この場合、0xCA^0x35^0x00なので、0xFFとなり、2ブロック目のデータを修復できることになります。

方式としてはRAID5と同様のパリティアルゴリズムです。

RARが具体的にどのようなアルゴリズムでリカバリレコードを出しているかはわかりませんが、基本的にはこのように連続していないデータのXORを取って、正常な部分をのぞいていく方法だと思われます。

id:TG-IF

なるほど。回答ありがとうございます。

思っていたよりも簡単に実装できるんですね。

目から鱗です。

2004/02/23 21:36:31

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません