我一直在阅读可用的PKWARE遗留password check mechanism。在对加密头解密的6.1.6一节末尾,该段指出:
在头被解密后,缓冲区中的最后一个或两个字节应该是解密文件的CRC的高阶字/字节,存储在Intel低字节/高字节顺序中。2.0之前的PKZIP版本使用2字节CRC检查;2.0之后的版本使用1字节CRC检查。这可用于测试所提供的密码是否正确。
上面的一段只提到了用CRC检查1到2个字节,但是没有提到,它也可以是last mod file time的检查,而不是基于general purpose bit flag的bit 3的CRC检查。
我在linux机器上使用默认的zip 3.0加密了一个文件,在遵循解密过程之后,我意识到应该用last mod file time而不是CRC检查最后一个或两个字节,以检查密码是否正确。
在网上搜索了一段时间之后,我只找到了这个版本的APPNOTE,它实际上描述了检查可以是CRC还是last mod file time,这取决于bit 3 of general purpose bit flag。
linux zip 3.0不遵循PKWARE标准还是PKWARE没有提到上述信息?
发布于 2018-12-06 09:54:18
linux 3.0不遵循PKWARE APPNOTE标准还是PKWARE没有提到上述信息?
两者都是真的。PKWARE并不觉得有必要在他们的标准中添加第三方修改。但是谢谢你找到了关于这个时间戳字节的任何文档。对于我自己的实现来说,我对此感到有些头疼,然后通过查看Info的源代码,我才意识到他们已经用时间戳字节代替了CRC字节(顺便说一下,这是个好主意)。
https://stackoverflow.com/questions/53552562
复制相似问题