我正在尝试解决文件的一些安全问题,该文件的MD5哈希值为76cdb2bad9582d23c1f6f4d868218d6c。我没有该文件,但基于互联网MD5搜索,我认为,这是最小大小的zip文件。我发现一个example和它的内容是完全一样的最小大小的zip文件。
是否可以使用Linux(或Windows)命令创建这样小的zip文件(22 B)?
顺便说一句:最近,我解决了类似的任务与gzip文件:gzip -n EmptyFileName
gzip -n EmptyFileName
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文件中删除,使其为空。
7z5jn7bk2#
一个更易于使用的版本,用于复制粘贴到shell中:
echo UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA== | base64 -d > empty.zip
这只是打印空zip文件的base64版本(通过创建一个包含单个文件的zip文件,然后从该zip文件中删除该单个文件来创建),然后使用base64 -d反转编码,并将输出写入empty.zip。如果您的计算机附带的base64版本没有使用与上面相同的语法,下面是一个更可移植但更简洁的替代方法:
base64
base64 -d
empty.zip
echo UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA== | openssl enc -d -base64 > empty.zip
dced5bon3#
使用Info-Zip(Ubuntu 20.04上的标准zip/unzip安装),你必须使用-i "*"选项。如果它不存在,zip将在创建时抱怨并退出,错误代码为1。与直觉相反,它的行为随着-i "*"而改变。
-i "*"
mkdir /tmp/mytest cd /tmp/mytest zip -r mytest.zip . -i "*"
mytest.zip将是您想要的空zip文件。
mytest.zip
rm5edbpk4#
使用此.bat脚本,您可以在Windows下创建empty.zip文件:
.bat
@echo off del /q /f empty.zip >nul 2>nul certutil -decode "%~f0" empty.zip -----BEGIN CERTIFICATE----- UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA== -----END CERTIFICATE-----
bkhjykvo5#
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 -d >empty.zip <<'EOF' UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA== EOF $ md5sum empty.zip 76cdb2bad9582d23c1f6f4d868218d6c empty.zip
虽然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
$ 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==
5条答案
按热度按时间wlwcrazw1#
给你:
有你提供的MD5签名。
如果你有Info-ZIP的zip,你可以这样创建它:
这会将"anyfile"添加到新的zip文件中,然后将其从zip文件中删除,使其为空。
7z5jn7bk2#
一个更易于使用的版本,用于复制粘贴到shell中:
这只是打印空zip文件的
base64
版本(通过创建一个包含单个文件的zip文件,然后从该zip文件中删除该单个文件来创建),然后使用base64 -d
反转编码,并将输出写入empty.zip
。如果您的计算机附带的
base64
版本没有使用与上面相同的语法,下面是一个更可移植但更简洁的替代方法:dced5bon3#
使用Info-Zip(Ubuntu 20.04上的标准zip/unzip安装),你必须使用
-i "*"
选项。如果它不存在,zip将在创建时抱怨并退出,错误代码为1。与直觉相反,它的行为随着-i "*"
而改变。mytest.zip
将是您想要的空zip文件。rm5edbpk4#
使用此
.bat
脚本,您可以在Windows下创建empty.zip
文件:bkhjykvo5#
tldr;
使用
printf
使用
base64
解释
虽然
zip
工具不支持创建空zip文件,但您可以创建一个非空zip文件,然后删除其内容:注意在给定结果
empty.zip
时zipinfo
如何返回错误:您可以确认
empty.zip
具有预期的字节:您可以使用
printf
将这22个字节(十六进制)直接写入文件:您还可以将这22个字节转换为32个base64编码字符,并使用: