windows 如何创建最小大小(空)的zip文件,其中有22B?

carvr3hs  于 2023-02-05  发布在  Windows
关注(0)|答案(5)|浏览(233)

我正在尝试解决文件的一些安全问题,该文件的MD5哈希值为76cdb2bad9582d23c1f6f4d868218d6c。
我没有该文件,但基于互联网MD5搜索,我认为,这是最小大小的zip文件。我发现一个example和它的内容是完全一样的最小大小的zip文件。

是否可以使用Linux(或Windows)命令创建这样小的zip文件(22 B)?

顺便说一句:最近,我解决了类似的任务与gzip文件:gzip -n EmptyFileName

wlwcrazw

wlwcrazw1#

给你:

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文件中删除,使其为空。

7z5jn7bk

7z5jn7bk2#

一个更易于使用的版本,用于复制粘贴到shell中:

echo UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA== | base64 -d > empty.zip

这只是打印空zip文件的base64版本(通过创建一个包含单个文件的zip文件,然后从该zip文件中删除该单个文件来创建),然后使用base64 -d反转编码,并将输出写入empty.zip
如果您的计算机附带的base64版本没有使用与上面相同的语法,下面是一个更可移植但更简洁的替代方法:

echo UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==  | openssl enc -d -base64 > empty.zip
dced5bon

dced5bon3#

使用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文件。

rm5edbpk

rm5edbpk4#

使用此.bat脚本,您可以在Windows下创建empty.zip文件:

@echo off

del /q /f empty.zip >nul 2>nul
certutil -decode "%~f0" empty.zip

-----BEGIN CERTIFICATE-----
UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==
-----END CERTIFICATE-----
bkhjykvo

bkhjykvo5#

tldr;

使用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.zipzipinfo如何返回错误:

$ 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==

相关问题