我正在尝试用文件解决一些安全问题,其MD5哈希是76cdb2bad9582d23c1f6f4d868218d6c。
我没有该文件,但基于互联网MD5搜索,我认为,它是最小尺寸的zip文件。 我找到了一个example,其内容与minimum size zip file完全相同。
是否可以使用Linux(或Windows)命令创建此类最小尺寸的zip文件(22 B)?
BTW:最近,我用gzip文件解决了类似的任务:gzip -n EmptyFileName
答案 0 :(得分:29)
你走了:
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文件中删除,并将其保留为空。
答案 1 :(得分:5)
一种易于使用的版本,用于复制和粘贴到shell中:
echo UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA== | base64 -d > empty.zip
这只打印空zip文件的base64
'版本(通过创建带有单个文件的zip文件然后从zip文件中删除该单个文件创建),并使用{{1来反转编码并将输出写入base64 -d
。
如果你机器附带的empty.zip
版本没有使用与上面相同的语法,那么这是一个更便携但更简洁的替代方案:
base64
答案 2 :(得分:1)
对于 Info-Zip(Ubuntu 20.04 上的标准 zip/unzip 安装),您必须使用 -i "*"
选项。如果它不存在,则 zip 会在创建时报错并退出,并显示错误代码 1。与直觉相反,它的行为随 -i "*"
发生变化。
mkdir /tmp/mytest
cd /tmp/mytest
zip -r mytest.zip . -i "*"
mytest.zip
将是您想要的空 zip 文件。
答案 3 :(得分:0)
使用此.bat
脚本,您可以在Windows下创建empty.zip
文件:
@echo off
del /q /f empty.zip >nul 2>nul
certutil -decode "%~f0" empty.zip
-----BEGIN CERTIFICATE-----
UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==
-----END CERTIFICATE-----
答案 4 :(得分:0)
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
请注意,当给定结果zipinfo
时,empty.zip
如何返回错误:
$ 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==