压缩包使用中文密码带来的问题
问题与成因
中文windows系统的中文编码多会使用GBK,而不是UTF-8。因此设置压缩密码时,密码很可能采用了GBK编码。在只使用UTF-8编码的操作系统(比如英文windows,linux等)上,即使输入了同样的中文内容也会提示密码错误。
据个例子,四个汉字“中文密码”编码为GBK后的16进制表示:
0xD6D0 0xCEC4 0xC3DC 0xC2EB
编码为UTF-8后的16进制表示:
0x4E2D 0x6587 0x5BC6 0x7801;
内容不相同。因此提示了密码错误。
解决方案
假设我们使用的OS是UTF-8的,那么就尝试将中文密码编码到GBK(可能乱码,但不影响使用)。
linux iconv
在linux机器上可以这样解决
echo -n "中文密码" | iconv -f utf-8 -t gbk >gbk_code.txt
执行后,在UTF-8系统系查看gbk_code.txt
:
没错,就是乱码的。只要直接复制乱码,粘贴进密码框就能解密。
Python
在windows上可以安装python3,然后这样解决:
s="中文密码"
with open('gbk_code.txt', 'wb') as f:
f.write(s.encode('gbk'))
直接复制乱码,粘贴进密码框就能解密。
Notepad++
Notepad++据说能够转换编码,没有亲自尝试过。