我试图解决一个文件的安全问题,该文件的MD5哈希值为76cdb2bad9582d23c1f6f4d868218d6c。
虽然我没有那个文件,但是根据互联网上的MD5搜索结果,我认为它是最小尺寸的zip文件。 我找到了一个示例,其内容与最小尺寸的zip文件完全相同。
是否可以使用Linux(或Windows)命令创建这样的最小尺寸zip文件(22 B)?
顺便提一下,最近我用gzip文件解决了类似的任务:gzip -n EmptyFileName
我试图解决一个文件的安全问题,该文件的MD5哈希值为76cdb2bad9582d23c1f6f4d868218d6c。
虽然我没有那个文件,但是根据互联网上的MD5搜索结果,我认为它是最小尺寸的zip文件。 我找到了一个示例,其内容与最小尺寸的zip文件完全相同。
是否可以使用Linux(或Windows)命令创建这样的最小尺寸zip文件(22 B)?
顺便提一下,最近我用gzip文件解决了类似的任务:gzip -n EmptyFileName
这是您需要的内容:
50 4b 05 06 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00
这具有您提供的MD5签名。
如果您使用Info-ZIP的zip,可以按照以下方式创建它:
zip empty.zip anyfile
zip -d empty.zip anyfile
这将"anyfile"添加到一个新的zip文件中,然后从zip文件中删除它,使其变为空。
更易于使用的版本,可复制并粘贴到shell中:
echo UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA== | base64 -d > empty.zip
这段代码将打印空zip文件的base64
编码版本(通过创建包含单个文件的zip文件,然后从zip文件中删除该单个文件而创建),并使用base64 -d
解码并将输出写入empty.zip
。
如果您的计算机上内置的base64
版本与上述语法不同,则可以使用以下更可移植但不太简洁的替代方法:
echo UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA== | openssl enc -d -base64 > empty.zip
-D
而不是-d
。你可以使用echo -n
来避免换行符,但你不需要这样做,直接使用 echo
命令即可。base64
不会关心换行符。 - Mark Adlerecho -n
不是可移植的,但我完全忘记了 base64
不关心行结尾符。我不确定最可移植的进行 base64 解码的方式是什么,也许可以通过 openssl
,但我认为在 macOS 上它不再是 oob 可用的。 - Mahmoud Al-Qudsi使用在Ubuntu 20.04上的标准zip/unzip安装程序Info-Zip,需要使用-i "*"
选项。如果没有此选项,zip将会抱怨并在创建时退出错误代码1。与直觉相反,它的行为会随着-i "*"
的变化而改变。
mkdir /tmp/mytest
cd /tmp/mytest
zip -r mytest.zip . -i "*"
mytest.zip
将是你所需的空 ZIP 文件。
.bat
脚本,你可以在Windows下创建一个 empty.zip
文件。@echo off
del /q /f empty.zip >nul 2>nul
certutil -decode "%~f0" empty.zip
-----BEGIN CERTIFICATE-----
UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==
-----END CERTIFICATE-----
printf
$ printf '\x50\x4b\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >empty.zip
$ md5sum empty.zip
76cdb2bad9582d23c1f6f4d868218d6c empty.zip
base64
$ base64 -d >empty.zip <<'EOF'
UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==
EOF
$ md5sum empty.zip
76cdb2bad9582d23c1f6f4d868218d6c empty.zip
zip
工具不支持创建空的 zip 文件,但是你可以创建一个非空的 zip 文件,然后删除其中的内容:
$ touch foo.txt
$ zip empty.zip foo.txt
adding: foo.txt (stored 0%)
$ zip -d empty.zip foo.txt
deleting: foo.txt
zip warning: zip file empty
empty.zip
时,zipinfo
会返回一个错误:$ zipinfo empty.zip
Archive: empty.zip
Zip file size: 22 bytes, number of entries: 0
Empty zipfile.
$ echo $?
1
你可以确认empty.zip
的字节是否符合预期:
$ file empty.zip
empty.zip: Zip archive data (empty)
$ xxd empty.zip
00000000: 504b 0506 0000 0000 0000 0000 0000 0000 PK..............
00000010: 0000 0000 0000 ......
printf
直接将这 22 字节(以十六进制表示)写入文件:$ printf '\x50\x4b\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >empty.zip
你也可以将这22个字节转换为32个base64编码字符并使用它:
$ base64 <empty.zip
UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==
echo -n '\x50\x4b\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > empty.zip
。 - Yona Appletreeecho -ne '\x50\x4b\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > empty.zip
。 - Tom Cornebize