【发布时间】:2011-02-08 07:28:59
【问题描述】:
我有以下问题。我需要在 linux 下使用另一方提供的密码创建一个 zip 文件,该密码用 CP-1252 编码。我尝试过将此密码的编码更改为 UTF-8。然后我制作了一个用这个 utf-8 编码密码保护的 zipfile。但是文件不能在windows中使用CP-1252编码的原始密码解压。
问候,
戈登
【问题讨论】:
标签: windows linux encryption encoding passwords
我有以下问题。我需要在 linux 下使用另一方提供的密码创建一个 zip 文件,该密码用 CP-1252 编码。我尝试过将此密码的编码更改为 UTF-8。然后我制作了一个用这个 utf-8 编码密码保护的 zipfile。但是文件不能在windows中使用CP-1252编码的原始密码解压。
问候,
戈登
【问题讨论】:
标签: windows linux encryption encoding passwords
处理包含非 ASCII 内容(文件名或密码)的 ZIP 文件非常困难,最好避免。您应该尽一切可能将允许的密码限制为纯 ASCII,这在任何地方都可以使用。
每个操作系统都会将字节视为它们自己的系统默认编码,这可能(但不确定)在最近的 Linuxen 中是 UTF-8,在 OS X 中是 UTF-8,而在 Windows 中绝不是 UTF-8。即使您使用 cp1252 编码的非 ASCII 密码创建 ZIP 文件,它也只能在西欧 Windows 安装中读取。并且一些 ZIP 工具的行为仍然不同(例如,nautilus zip 解码器似乎使用 ISO-8859-1 作为密码,即使它使用 UTF-8 作为文件名)。整个事情都是一团糟。
您可以在 Linux 中使用 cp1252 密码创建 ZIP 文件。您目前使用什么工具来创建密码文件?命令行zip 工具只接受字节并且不关心它们的编码,所以为了确保当它提示你输入密码时你在键盘上输入的任何非ASCII字符都在cp1252中,你应该设置将您的终端编码为 cp1252。对于 GNOME 默认的“终端”,这可以从终端->设置字符编码->Windows-1252 完成(如果未列出,您可能需要添加/删除此编码)。
【讨论】:
java.util.zip 没有密码功能(并且它总是使用无用的 Java 默认字符集)。如果您不需要这些文件在较旧的 Windows(XPSP3 之前)上工作,您可以使用 winzipaes。该库使用 ISO-8859-1 作为密码,但很容易破解源代码来更改它。不幸的是,它仍然使用java.util.zip 混乱的默认字符集文件名。叹息......正如我可能已经提到的,ZIP 中的非 ASCII 是你应该不惜一切代价避免的痛苦。
看看 7z 项目,它对我有用。
【讨论】: