加载中…
个人资料
_乐乐爸_
_乐乐爸_
  • 博客等级:
  • 博客积分:0
  • 博客访问:66,596
  • 关注人气:5
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

百度网盘压缩下载文件的CRC校验错误的解决方法

(2017-06-28 22:19:55)
标签:

百度网盘

zip打包压缩

下载

crc校验错误

解决方法

分类: 电脑数码

百度网盘压缩下载文件的CRC校验错误的解决方法

从百度网盘用打包压缩方式下载的文件在解压时会碰到CRC校验错误,这里有两种情况:

a.如果文件尺寸小于4G,可用国产的好压解出,解出的文件是正确的
b.如果文件大小大于4G,解出的文件大小是错误的

文件大小问题,从初步分析来看,百度网盘提供的压缩打包下载是采用zip 存储方法打包压缩的,而zip格式不支持原/压缩文件大小超过超过0xFFFFFFFF,即4294967295字节(即4G)。

比如,从百度网盘下载了一个电影,实际大小为18,745,396,529字节(0x 04 5D 50 0D 31),用7z解压会出现crc校验错误,用好压解压出的文件仅为1,565,527,345字节。打开该压缩文件,可以看到其显示的文件大小是错误的,显示为1,565,527,345字节(0x 5D 50 0D 31)

原因如下:zip格式仅用4字节来存储原/压缩文件尺寸,把实际大小的最前一位0x04给省略了,所以文件尺寸就设定错误了。

a. 显示的压缩文件大小:

百度网盘压缩下载文件的CRC校验错误的解决方法

b. 压缩文件中对应压缩和没压缩的文件尺寸字节

百度网盘压缩下载文件的CRC校验错误的解决方法

解决方法如下:

a. 如果文件大小大于4G,作为一个单独的压缩文件(单独放在一个文件夹内,下载这个文件夹)下载,因为百度采用的store方式打包压缩的,即对文件没有任何压缩,那么在下载后删除文件的zip头部和尾部即可。

b. 删除头部,即找到文件实际内容开始的offset

a) 找到头部的第2个0x04 03 4B 50zip header的开始标志),第1个对应的文件目录信息,这里开始于0x3B
注意1. 如果文件本身就是zip文件,要特别小心,因为下面还有文件头标识的,不要多删了。
注意2. 下图中为zip header看起来是0x50 4B 03 04, 那是因为是该文件是按little-endian 字节顺序保存的。具体header含义可参照,https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT

b) 再跳过0x1E长度(zip文件header固定长度),即定位到0x59,记下前4个字节(快速看就是文件名前4个字节),记为两个2bytes,注意方向,下图为0x00 780x00 00,对应了文件名长度和zip文件的extra field长度;

c) 0x59开始,跳过0x78长度(即文件名长度0x78+extra field 长度0x00),定位到0xD1,从0xD1开始,这里为文件内容开始,将前面的所有内容删除。


百度网盘压缩下载文件的CRC校验错误的解决方法


c. 删除zip尾部,最后0x16字节是以0x06 05 4B 50开头的,这0x16(22个)字节的第0xC-0x10(即第13-16)的四个字节为:0x00 00 00 F1, 从再向上跳过0xF1,从这里开始至尾部选取删除。
简单的方法是从尾部向上找0x02 01 4B 50开始(注意字节顺序,下图为0x50 4B 01 02),找到第2个,从第二个开始(含0x50 4B到尾部的所有内容全部删除。然后另存为正确的文件名即可,新文件的尺寸即为18,745,396,529字节,则侧面验证了新文件大小是正确的,没有损坏。

   

百度网盘压缩下载文件的CRC校验错误的解决方法

要特别注意,如果下载文件本身就是zip文件,会有很多的文件标识。

如果,想偷懒,可以使用我的python解压,支持多文件/多文件夹/超大文件(>4G)。如果你也用python的话。: )链接: https://pan.baidu.com/s/1kVOIjeZ 密码: yuq2

用法:

单文件: python unzip_baidu.py pack.zip
    python unzip_baidu.py d:\temp\pack.zip

多文件: python unzip_baidu.py pack.zip pack_2.zip
     python unzip_baidu.py d:\temp\pack.zip d:\temp\pack_2.zip

转载,请注明出处,如果商业用途,请联系!

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有