为什么将 Mac 上的文件复制到硬盘并从 Windows 上查看时通常会被加密?

为什么将 Mac 上的文件复制到硬盘并从 Windows 上查看时通常会被加密?

为什么当将 Mac 上的文件放在外部驱动器上并且该驱动器插入 Windows 系统时,它通常会被加密?

我来解释一下我的意思,因为它们乍一看似乎没有加密,因为你可以打开它们......

但仔细检查后,它们会在 Windows 资源管理器中显示为绿色

在此处输入图片描述

并且 Windows 密码命令显示它们已加密,并且它们的属性属性也显示为加密。

在此处输入图片描述

我不是唯一遇到这种情况的人,例如如何在 Windows 7 中列出加密文件? 一位发帖者写道:“...我在清理外部硬盘时发现了 150 个加密文件。所以我很想知道它们是什么以及在哪里,因为我的电脑上没有使用加密。结果发现这些文件来自一些我可以轻松获得的下载。或者在我的电脑上看到“_MACOSX”文件夹。它们始终是加密的。”

我遇到的一个例子是我在 rails 中编写的一个程序,其中只有一个名为“scaffoldingtest1”的目录,我用命令创建了该目录rails new scaffoldingtest1 ,并且我将父目录复制到了外部硬盘驱动器。

我还看到了一些来自 Mac 用户的与 Adob​​e 相关的 PDF。

而且它们就像在 Windows 机器上加密一样被加密,也就是说它们只能通过该计算机的 Windows 用户名查看。如 Windows 中加密的属性所示。并且该计算机上的用户可以解密它们。但它们不知何故被加密了。如果将该外部驱动器带到另一台 Windows 计算机上,则无法读取它们。

我想知道 OSX 上的什么设置导致了这种情况?

注意:由于某些版主倾向于删除长评论,从而丢失重要信息,因此这里提供了截至英国时间 2020 年 11 月 21 日 20:13 的当前评论链接。https://pastebin.com/raw/f2Aytv6W

答案1

造成这种情况的原因是内置 macOS Archive 程序和各个 Windows 版本中的内置解压缩程序存在已知的兼容性问题。

当您使用 Finder 内置的“压缩”工具时,您将获得一个 ZIP 文件。ZIP 文件包含每个文件的“外部文件属性”等内容。这些属性依赖于主机系统(即,不能保证这些属性在各种操作系统上都能以相同的方式理解)。

不幸的是,macOS 工具标记文件的属性之一被 Windows 内置解压缩工具解释为将文件标记为“已加密”(这是 NTFS 文件系统内置的一种特殊形式的单文件加密)。这意味着解压缩后的文件具有加密属性,并且其名称在 Windows 资源管理器中显示为绿色。

但是,这样做并没有什么重大的缺点,因为您可以轻松打开文件的属性并删除“加密”属性上的复选标记。文件内容实际上并未加密,因此可以像往常一样打开文件。

您可以通过在 Mac 上使用不同的压缩工具或在 Windows 上使用不同的解压缩工具来避免此问题。

技术细节如下:

问题是由 Windows 解压程序错误解析每个文件/文件夹的 ZIP 标头中的“外部文件属性”引起的。标头的这个元素与主机相关,因此解压程序应检查中央目录文件标头的元素(称为“制作版本”),以检查哪个操作系统制作了该文件。macOS 压缩工具在此处正确地存储了“Unix”的属性值 3。

不幸的是,Windows 工具忽略了此值,并且始终将文件属性解释为在 Windows 上创建的。“加密”问题源于这样一个事实:在 Windows 上创建的 ZIP 文件根据 Microsoft 定义的文件属性常量 (FILE_ATTRIBUTE_<...>) 存储文件属性。特别是,由值 0x4000 定义的 FILE_ATTRIBUTE_ENCRYPTED 表示加密文件或目录。然而,Unix 系统使用 POSIX 常量,其中 S_IFDIR 是表示“这是一个文件夹”的属性 - 通常定义为值 0040000,相当于 0x4000。

相关内容