⚠️ 这是一个非官方翻译网站,与 ImageMagick Studio LLC 无关。准确信息请参阅原文(https://imagemagick.org/cipher/)

加密图像

加密图像 • 解密图像 • 加密与解密的注意事项

大多数图像在设计上都是为了被频繁地、被许多人查看。例如 Web 图像,每天可能被众多访问者查看数百次。然而在某些情况下,您可能希望让某张特定图像保持私密,使得只有您自己,或者您挑选的少数好友或 Web 访问者才能查看它。ImageMagick 允许您打乱图像,使得除非有人知道您的口令短语,否则无法查看原始内容。

您可以使用某个加密工具来打乱图像,但它们通常会打乱整个文件,使其无法被识别为某种图像格式。而使用 ImageMagick,仅有像素会被打乱。被打乱的图像仍然会被识别为图像,甚至会在您的网页中显示。但其内容看起来是一堆乱码,与原始内容毫无相似之处。

加密图像

使用 -encipher 选项打乱图像,使其无法被识别。该选项需要一个包含您口令短语的文件名。在本例中,我们打乱一张图像并将其保存为 PNG 格式:

magick rose.jpg -encipher passphrase.txt rose.png

这里我们使用另一张图像作为口令短语来加密图像:

magick rose.jpg -encipher smiley.gif rose.png

解密图像

使用 -decipher 选项将图像恢复,使其再次可被识别。该选项需要一个包含您口令短语的文件名。在本例中,我们将图像恢复并保存为 JPEG 格式:

magick rose.png -decipher passphrase.txt rose.jpg

加密与解密的注意事项

某些格式不支持加密后的像素(例如 JPEG 或 GIF 格式)。为确保您的图像格式受支持,请先加密一张测试图像,并在以该格式加密任何其他图像之前确认能够还原其原始内容。

图像格式可能仅支持 8 位和 RGB(TrueColor)。因此,您可能希望在输出文件名之前加入选项 "-depth 8 -type TrueColor"。

口令短语可以是字母和符号的任意组合。为帮助确保您的图像保持私密,它应至少为 12 个字符的组合。另外请确保您的口令短语文件权限能够防止他人读取,否则未经授权的用户可能得以查看原始图像内容。

只有在您知道口令短语的情况下,才能还原原始图像内容。如果您丢失或忘记了它,您的原始图像内容将永远丢失。

ImageMagick 仅打乱图像像素。图像元数据保持原样不变,任何能够访问图像文件的人都可以读取。

ImageMagick 使用 AES 的计数器(CTR)模式来打乱图像的像素数据。当前实现以确定性方式从用户提供的口令短语中导出 AES 密钥和 IV(初始计数器)二者:口令短语的前半部分成为 AES 密钥,后半部分与图像尺寸一起进行哈希以生成 IV。由于此 IV 仅从口令短语以及图像的宽度和高度导出,因此用相同的口令短语和相同的尺寸加密多张图像会产生相同的 IV,从而产生相同的密钥流。

CTR 模式要求在同一密钥下的每次加密都使用唯一且不重复的 IV。在 CTR 模式中重用 IV 会导致密钥流重用,这使得攻击者可以通过对密文进行 XOR 来恢复有关明文的信息。因此,当前这种确定性的 IV 构造方式无法提供密码学上强健的机密性。

为避免密钥流重用以及由此导致的信息泄露,用户需要为每张图像提供不同的口令短语,这并不现实,而且仍然无法满足现代密码学的预期。因此,ImageMagick 的加密功能仅适用于随意的混淆,而不适用于对安全性敏感的加密。

目前,只有 ImageMagick 能够还原您加密后的图像内容。我们使用标准的密码算法和模式,因此其他厂商也可能支持加密后的图像内容。

一些图像加密的小型实用示例可在 IM Examples 的 Encrypting Image Data 中找到。