リカバリレコードのサイズや書庫サイズあたりの数が示してありました。
ちょっとこれじゃ物足りないでしょうねエ・・・もともとシェアウエアだから、詳細は公開されていないのでしょうか?
具体的にはどこの辺りが参考になるんでしょう。
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を取って、正常な部分をのぞいていく方法だと思われます。
なるほど。回答ありがとうございます。
思っていたよりも簡単に実装できるんですね。
目から鱗です。
うーん、もっと情報が欲しいですねぇ。
WinRarの作者さんは多分既存のアルゴリズムを元に
リカバリーレコードの機能をつけたような気がするんですが、どうなんでしょう。