蓝光动力论坛-专注于资源整合_最好的电影影单_电影合集站

 找回密码
 立即注册
查看: 2275|回复: 0
打印 上一主题 下一主题

WinRAR压缩文件是怎么实现通过恢复记录使损坏文件被修复的?

[复制链接]
跳转到指定楼层
楼主
发表于 2021-4-3 21:59:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,解锁更多优质资源,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
问题描述:据个人经历,提示CRC校验错误和“未预料的压缩文件末端” ,可以通过压缩软件自带的修复功能解决问题——有一定概率成功。CRC是一种校验算法,不能反推原始数据,那么,压缩软件是怎么在不给出正确的数据块情况下的修复的?
===

作者:夏雨婷
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

压缩文件损坏后是如何修复的?如果没猜错,题主指的是类似WinRAR的恢复记录的功能,通过增加一些冗余数据实现整个压缩文档少部分连续数据损坏得以修复。
CRC确实只是校验算法,只能判断解压缩后的数据和元数据是否匹配,没有修复功能,那么让你来实现类似WinRAR恢复记录功能该如何做?
在没有任何资料和知识的情况下,我的想象力也就达到了在压缩包尾部叠加一样的数据,这样压缩包的体积就增加了一倍,其中一部分损坏就取另一部分即可。但是WinRAR的文档明确写着:“If damaged area is continuous, every sector helps to recover 512 bytes of damaged information.”
这已经超出我的知识范围了。
WinRAR文档还写着:“RAR 4.x recovery record is based on XOR algorithm.” 这句我看的有点莫名其妙,XOR怎么还会是算法?我想到的一个点子是,把压缩文档对半分,然后按位保存前半和后半的xor值,这样“只”需要增加50%的冗余数据就可以修复整个文档了。
在计算机网络课程,提到了“家喻户晓”的CRC校验算法后,还顺带提了一句所谓“海明码”:
http://zh.wikipedia.org/wiki/%E6%B1%89%E6%98%8E%E7%A0%81
海明码通过在2的整数次幂插入校验位可以纠正一位错误,但是一位显然没有多大的作用,WinRAR的文档也明确指出它有能力解决远超过一位的错误。我曾经以为海明码就是正确答案,还打算将其扩展为支持N位的算法,直到发现了下面这个“所罗们纠错算法”:
http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
我认为该算法就是最终答案。
=====================
作者:ReVanTis
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

不管是校验算法,还是纠错算法,本质上或者说思路上都是利用冗余信息对文件原本的样子进行推算。
根据用途的不同,校验算法的目的是利用更小的冗余信息进行错误是否存在的验证,而纠错算法是在保证一定冗余信息量的前提下,对已经发生错误的文件进行修复。
CRC可以保证检测出100%的奇数个错误和小于其阶数个的突发错误。
这一算法仅仅是用于检测错误,而不是纠正错误,单纯凭借这一信息很难修复出错。
对rar文件进行成功修复往往是建立在配置了一定比例的冗余数据的基础上的。
而且当错误足够多时,往往这些冗余数据也不能起到太大的帮助。
-------------------------------
题外话:
事实上香农在通信的数学理论一书中提出过:
存在一纠错算法,使得信号传输过程中的误码率得以任意小。
如果原话理解起来费劲的话,可以理解成:
存在一个纠错算法,可以使得错误率不为100%的任意情况下通信得以绝对保真。
唯一的问题在于:为了保真,我们需要付出的额外的冗余代价是否现实,或者值得。
这一论断可以认为是通信领域中最有用也最没用的一个。
因为这一论断从事实上可以证明不论通信多么差,我们总可能设计出算法来对通信进行可靠性保证。
但是这个论断对于我们实际设计出这些算法简直是一点帮助也没有,充其量也不过是为我们鼓起信心而已。
=====================
作者:依韵
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  CRC是校验文件,经常在与压缩和解压相关的文件或软件中.任何文件损坏之后,都应该从其它渠道获得未损坏的相同文件来来替换已经损坏的文件.
  判断出错原因
  出错信息为“CRC失败于加密文件(口令错误?)”(RAR压缩包设了密码,但密码输入错误或是密码输入正确但循环冗余校验码(CRC)出错!只不过因为此RAR压缩包加了密码的缘故,所以WRAR才猜测说可能是“口令错误”)
  区分上面两种错误的方法:如果密码输入错误的话是无法解压出任何文件的!但如果压缩包内有多个文件,且有一部分文件解压缩出来了,那么应该是RAR压缩包循环冗余校验码(CRC)出错而不是密码输入错误。
  循环冗余校验码(CRC)出错,这是最常见的情况,这也是本文讨论的重点!和上面的几种解压缩出错不同,这种情况是和RAR压缩包损坏有关的。
  原因有几种:
  (1)网络传输状况不好(如断线过多,开的线程过多,服务器人太多导致不能连接太多等)导致下载下来的文件损坏!
  (2)站点提供的的RAR压缩包本来就是损坏的(这就没办法了,除非此压缩包中含有回复记录)。
  (3)所使用的下载工具不够完善,比如有的下载工具多开了几个线程后,下载的收尾工作很慢,有些时候下载到99%时数据就不再传输了,一定要人工操作才能结束(先停止下载接着再开始)。笔者就碰到过好几次这样的情况。结果是文件下载下来以后解压缩到快结束时CRC出错。
  应急解决
  1.利用恢复记录
  想要修复CRC是有条件的,必须是此RAR压缩包中有恢复记录,而此恢复记录是RAR压缩包被压缩时的可选项。
  而WinRAR压缩时默认是不放置恢复记录的,如果提供的是这样的RAR压缩包,那么用户自己想要修复CRC错误是不可能的。
  2.釜底抽薪
  如果RAR压缩包中的文件是那种即使文件有缺失仍能正常或较为正常地使用的(其实大多数的文件对部分数据损坏都不是非常敏感的),那便可以使出我们的终极杀招:釜底抽薪法!
  其原理就是让RAR压缩包内损坏的文件解压缩出来,不理会WinRAR的警告,能解压多少就解压多少。解压缩软件还是用WinRAR,不过要做小小的设置。
  在右键点击解压缩文件后跳出的窗口里,把“保留被损坏的文件”复选框选中,点击确定开始解压缩。不要理会解压缩出错的信息,解压缩结束之后你会发现损坏的文件被解压出来了。经过这样解压出来的损坏文件能正常使用的几率还是非常高的。
  做好保险工作
  1.做好恢复记录
  原始RAR压缩包在压缩时,如果选择放置恢复记录,这样用户下载后即使CRC出错也有自己修复的机会!
  2.采取分卷压缩
  采取分卷压缩的方法便可较大地减少因为出现不可恢复的错误带来的损失。
  3.老文件也加恢复记录
  有人也许会问,新压缩的RAR压缩包可以加入恢复记录,那么已经压缩过的RAR包有没有办法也加上恢复记录呢?给已经压缩好的RAR压缩包加上恢复纪录是有办法的。
  只需要打开压缩包,在“命令”菜单中选择“保护档案文件”即可。
  小常识:
  其实RAR压缩包出错的解决方法主要是以预防为主!如果没有预防,等到真正出了问题,技术上也是没办法完美解决的!像循环冗余校验码(CRC)出错这种情况,如果RAR压缩包不包含恢复记录的话,用户自己想要修复CRC是不可能的!本文的主要目的是想告诉大家一些出错的原因以及讨论一些从根本上预防出错和把损失减少到最小的办法而已!
——资料来源互联网整理
==============================
延伸阅读:WinRAR恢复记录是什么,怎样向WinRAR压缩包添加恢复记录?
WinRAR恢复记录是什么,怎样向WinRAR压缩包添加恢复记录?今天弄懂了一个概念,感觉挺高兴的!很多朋友会使用WinRAR软件,但是当有网友在帖子中提到WinRAR恢复记录,您知道是什么意思么?所以小编现在忙不迭的来向您得瑟下,下面的内容就用来解决题目中的问题,小编通过WinRAR5.0位朋友们截图,操作方法适用于所有版本,不过向WinRAR压缩包中添加恢复记录后,压缩文件大小会有一定程度的增加。
一、WinRAR恢复记录是什么
WinRAR恢复记录是WinRAR文件(压缩包)创建者为防止压缩包在流传过程中,数据意外受到损坏,而在压缩包中添加的文件恢复数据,虽然作用不大,但是也不失为一个很不错的选择。

二、WinRAR压缩包添加恢复记录操作方法
第一步、对着我们需要压缩的文件单击鼠标右键,菜单中选择“添加到压缩文件中(A)”

第二步、在“压缩文件名和参数”界面,在右下角“压缩选项”下面找到并勾选“添加恢复记录(E)”

第三步、接下来点击“高级”选项卡,在“恢复记录”中设置压缩文件恢复记录占整个文件百分比,默认为3%(最大支持10%),完成后点击确认,软件开始进行压缩操作

QQ|侵权链接删除联系方式:bluraymov#163.com @替换#|Archiver|小黑屋|独家资源整合

GMT+8, 2024-12-22 09:58

Powered by Discuz!

© 2015-2020 蓝光动力社区

快速回复 返回顶部 返回列表