rar,zip文件加密判断
rar官方文档:https://www.rarlab.com/technote.htm
zip官方文档:https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.2.0.txt
一.rar加密判断:
rar文档格式如下: 自解压模块(可选)RAR 5.0签名归档加密头(可选)主归档头归档注释服务头(可选)文件头1 前一个文件的服务头(NTFS ACL,流等)(可选)。... 文件头N个先前文件的服务头(NTFS ACL,流等)(可选)。恢复记录(可选)。归档头的末尾。
rar5.0以后的签名格式为:0x52 0x61 0x72 0x21 0x1A 0x07 0x01 0x00,以前的签名格式为0x52 0x61 0x72 0x21 0x1A 0x07 0x00。两者加密判断方式不同,5.0以前的只需要判断文档第24个字节第3位是否为1,为1加密(文档格式官方地址未找到,可参考https://blog.csdn.net/vevenlcf/article/details/51538837)。5.0以后的版本判断加密方式稍显复杂。需要在文件头中找出Extra area区域位置,如果它的值是0x01则文件加密。需注意的:
1.vint 可变长度整数。可以包含一个或多个字节,其中每个字节的低7位包含整数数据,而每个字节中的最高位是连续标志。如果最高位为0,则这是序列中的最后一个字节。因此,第一个字节包含整数和连续标志的7个最低有效位。第二个字节(如果存在)包含下一个7位,依此类推。
2.文档中存在多个归档头,只能通过Header type确认归档头类型。且每个归档大小需要通过Header size计算下一个归档头位置。直到找到需要的归档头
文件头结构如下:
Header CRC32 | uint32 | |||||||||||
Header size | vint | 标头数据的大小,从“ 标头类型”字段开始,直至(包括可选的)额外区域。在当前的实现中,该字段不得超过3个字节,从而导致最大标头大小为2 MB | ||||||||||
Header type | vint | 2 为文件头, 3 为服务头 | ||||||||||
Header flags | vint | 所有标头共有的标志 | ||||||||||
Extra area size | vint | extra area大小. 可选字段, 当 header flag为0x0001时存在 | ||||||||||
Data size | vint | Size of data area.可选字段,仅当设置了0x0002标头标志时才存在。对于文件标题,此字段包含打包的文件大小 | ||||||||||
File flags | vint |
这些标头类型的特定标志: 0x0001目录文件系统对象(仅文件标头)。 0x0002存在Unix格式的时间字段。 0x0004 CRC32字段存在。 0x0008打开包装的尺寸是未知的。 如果设置了标志0x0008,则未打包的大小字段仍然存在,但必须忽略,并且必须执行提取,直到到达压缩流的末尾。如果实际文件大小大于操作系统报告的大小,或者文件大小未知(例如,除从stdin归档到多卷归档时的最后一个卷以外的所有卷),则可以设置此标志。 |
||||||||||
Unpacked size | vint | 解压缩的文件或服务数据大小。 | ||||||||||
Attributes | vint | 如果是文件头,则为操作系统特定的文件属性。可以用于特定数据需求,也可以保留,并为服务标头设置为0 | ||||||||||
mtime | uint32 | Unix时间格式的文件修改时间。可选,如果设置了0x0002文件标志,则存在。 | ||||||||||
Data CRC32 | uint32 | 已解压缩的文件或服务数据的CRC32。对于在卷之间拆分的文件,它包含当前卷中除最后文件部分以外的所有文件部分所包含的文件打包数据的CRC32。可选,如果设置了0x0004文件标志,则存在。 | ||||||||||
Compression information | vint |
低6位(0x003f掩码)包含压缩算法的版本,导致可能的0-63值。当前版本是0。 第7位(0x0040)定义固态标志。如果已设置,RAR将在处理之前的文件后继续使用剩下的压缩字典。只能为文件头设置,而不能为服务头设置。 位8-10(掩码为0x0380)定义了压缩方法。当前仅使用值0-5。0表示无压缩。 位11-14(0x3c00)定义提取数据所需的字典大小的最小大小。值0表示128 KB,1-256 KB,...,14-2048 MB,15-4096 MB。 |
||||||||||
Host OS | vint |
用于创建存档的操作系统的类型。 0x0000 Windows。 0x0001 Unix。 |
||||||||||
Name length | vint | 文件或服务标头名称的长度。 | ||||||||||
Name | ? bytes |
可变长度字段,包含UTF-8格式的名称长度字节,不带零。 对于文件头,这是已归档文件的名称。正斜杠字符用作Unix和Windows名称的路径分隔符。对于Unix名称,反斜杠被视为名称的一部分,对于Windows文件名称,反斜杠被视为无效字符。名称类型由“ 主机操作系统”字段定义。 如果Unix文件名包含无法正确转换为Unicode和UTF-8的任何高级ASCII字符,我们会将此类字符映射到0xE080-0xE0FF私有Unicode区域,并在结果字符串中插入0xFFFE Unicode非字符以表明它包含已映射字符,提取时需要转换回去。没有定义0xFFFE的具体位置,我们需要搜索整个字符串。此类映射的名称不可移植,并且只能在创建它们的同一系统上正确解压缩。 对于服务标题,此字段包含服务标题的名称。现在使用以下名称:
|
||||||||||
Extra area | ... | 包含附加标头字段的可选区域,仅当设置了0x0001标头标志时才存在。 | ||||||||||
vint | 可选数据区,仅当设置了0x0002标头标志时才存在。如果是文件头,则存储文件数据;对于服务头,则存储服务数据。根据压缩方法中的值, 可以对压缩信息进行未压缩(压缩方法0)或压缩。 |
文件和服务标头使用相同类型的额外区域记录:
Type | Name | Description |
0x01 | File encryption | 文件加密信息。 |
0x02 | File hash | 文件数据哈希 |
0x03 | File time | 高精度文件时间。 |
0x04 | File version | 文件版本号 |
0x05 | Redirection | 文件系统重定向。 |
0x06 | Unix owner | Unix所有者和组信息 |
0x07 | Service data | 服务标头数据 |
文件加密记录
如果文件数据被加密,则存在该记录。
Size | vint | |
Type | vint | 0x01 |
Version | vint | 加密算法的版本。现在仅支持0版本(AES-256)。 |
Flags | vint |
0x0001存在密码检查数据。 0x0002使用调整过的校验和而不是普通校验和。 如果存在标志0x0002,则RAR转换保留校验和的文件或服务数据的完整性,因此它取决于加密密钥。它使得不可能根据校验和猜测文件内容。它会影响文件头中的数据CRC32和额外区域中文件哈希记录中的校验和。 |
KDF count | 1 byte | PBKDF2函数的迭代数的二进制对数。RAR可以拒绝处理超过某个阈值的KDF计数。阈值的具体值取决于版本。 |
Salt | 16 bytes | 设置加密文件解密密钥的Salt值。 |
IV | 16 bytes | AES-256初始化向量 |
Check value | 12 bytes | 用于验证密码有效性的值。仅当设置了0x0001加密标志时才存在。前8个字节是使用额外的PBKDF2轮次计算的,最后4个字节是额外的校验和。与标准标头CRC32一起,我们具有64位校验和,以可靠地验证此字段的完整性并区分无效的密码和损坏的数据。可以在UnRAR源代码中找到更多详细信息。 |
二.zip加密方式判断
zip文件格式:
ZIP文件格式结构:[本地文件头1][文件数据1][数据描述符1]。 。。[本地文件头n][文件数据n][数据描述符n][存档解密头](EFS)[存档额外数据记录](EFS)[中央目录][zip64中央目录记录结尾][zip64中央目录定位器结尾] [中央目录记录的结尾]
A.本地文件头格式:本地文件头签名4个字节(0x04034b50)需要提取2个字节的版本通用位标志2个字节压缩方式2字节最后的mod文件时间2个字节最后的mod文件日期2个字节crc-32 4字节压缩大小4字节未压缩大小4字节文件名长度2个字节额外的字段长度2个字节文件名(可变大小)额外栏位(可变大小)
其中本地文件头中通用标志位的第1位被设置则表示,文件加密,但是需要注意的是,并不是每个文件头的该位置表示都能反映是否加密,比如存在多层文件夹的情况,该文件头表示的是文件夹(即当需要提取2个字节的版本为a时),那么通用标志位不能反映是否加密。
rar,zip文件加密判断相关推荐
- doc.xls,ppt,docx,xlsx,pptx文件加密判断
office和wps采用的都是复合文档格式,至于什么是复合文档可以参考:http://club.excelhome.net/thread-227502-1-1.html. 虽然两者都是复合文档格式,而 ...
- 解压 rar,zip 文件保存到本地
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.导入依赖 二.功能代码 三.测试结果 解压前 解压后 总结 参考博客1 参考博客2 参考博客3(此方法未使用) 前 ...
- 网络安全与网站安全及计算机安全:如何使用Kali Linux的Rarcrack获取RAR压缩文件加密密码?
知识点详解 1.1.Rarcrack是一款获取压缩文件密吗的软件,但是仅支持zip.rar和7z三种类型. 1.2.在kali操作系统中是没有此工具的,所以就必须先安装才能使用. 1.3.安装Rarc ...
- zip文件加密、解密解压实操,附带文件上传安全检查
Zip4J 使用 今天接触到一个要解压上传的加密zip的需求,这里使用 zip4j 来实现加密解密. 依赖 <dependency><groupId>net.lingala.z ...
- RAR/ZIP文件解压(兼容RAR5)
前言: 记录压缩包解压功能开发过程遇见的一些问题,及最终的解决方案: 原始需求: 客户提出需要批量上传文档,上传文件为包含一系列文件的压缩包,格式为zip或rar: 历史实现方式: zip格式:使用n ...
- java zip文件加密_java自动压缩文件并加密
实现功能:自动压缩并加密 /** * * @Title: zipFilesAndEncrypt * @Description: 将指定路径下的文件压缩至指定zip文件,并以指定密码加密,若密码为空,则 ...
- C# 客户端rar/zip文件解压缩
说明: (1)下载winrar.exe,安装到指定路径,例如:D:\WINRAR,之后把安装的文件夹(D:\WINRAR)拷贝到应用程序根目录: (2)具体方法如下(注意方法中的路径): /// &l ...
- zip文件加密的几种破解方法
一.使用ZipCenOp.jar(需要java环境),在cmd中使用 java -jar ZipCenOp.jar r xxx.zip 成功后压缩包可以直接打开 ZipCenOp.jar 链接: ht ...
- android下zip压缩文件加密解密的完美解决方案,Android之zip文件加密解压及进度条的实现...
zip文件的解压可以使用java的zip库,但是没有实现对加密文件的解压功能,这里可以使用zip4j来实现.具体可以参看该文<Android下zip压缩文件加密解密的完美解决方案 http:// ...
最新文章
- tomcat 热部署 生产环境_屋顶隔热改善舍内热环境及生产性能
- 百余位中外学者探讨神经科技挑战:伦理担忧与监管难题并存
- java如何绘制图表_java绘制excel图表(jxcell)
- 机器学习:SVM训练,SMO算法描述,启发式选择样本或变量
- FastDFS 文件上传工具类
- 【Hash应用问题】例3.1 统计同成绩学生人数
- 关系抽取之PCNN(Piece-Wise-CNN)
- day2_python年会抽奖游戏
- 用一台笔记本跑ROVIO
- 小黄鸡QQ空间自动回复机器人
- matlab马赫带,学习实现马赫带效果
- 多行文本溢出隐藏省略号
- 万洲金业:白银继续走高,预期缓慢冲高
- 编写计算机程序的几个步骤,第1讲程序设计的一般步骤ok.doc
- java 5,8,9章复习
- selenium 接管已经打开的本地浏览器窗口
- 如何有效训练你的研究能力
- c语言中输入格式带括号,C语言中printf()后的括号里面的怎么写,表示什么?...
- mysql show tables报错_show tables能看到表却无法读写?
- Windows常用快捷键及运行命令
热门文章
- 2012年中国最佳医院排行榜
- windows.old是什么文件,如何删除
- win10笔记本合盖无法睡眠(风扇依然在转动)(开盖后不是锁屏状态)
- mysql分列查询,SQL计算符合条件行数量,并分列显示,怎么做
- jQuery 从零开始学习 (三) 属性与css样式
- 英文中常见连读规律总结
- 手把手系列之三十——手把手教你做番薯小煎饼
- 从内地或海外前往香港的步骤攻略(2023.2.更新)
- APISpace 通用文字识别OCR API
- 青龙面板基本脚本运行必装依赖 一键式安装脚本安装依赖 2023年3月28日