【问题标题】:Encrypt PNG image contents in PHP在 PHP 中加密 PNG 图像内容
【发布时间】:2012-05-29 20:46:16
【问题描述】:

我想在 PHP 中加密 PNG 文件的内容(不是标题)。

在加密 (RSA) 之后,IDAT 块的大小(包含有关像素的信息)会发生变化。所以我想到了手动更改那些二进制数据(块的长度、整个块和校验和)。宽度、高度、颜色深度等特定信息将保持不变(未加密)。

只是想知道是否有一个函数可以为我创建整个标题,并允许插入二进制数据作为内容(计算校验和以便正确显示图像)或者我必须这样做自己做的吗?

【问题讨论】:

  • 为什么不加密整个文件呢?不加密的部分有什么好处?
  • 我猜你希望标题保持有效?我倾向于这样做:将图像解压缩为(r,g,b,a)32位整数数组,对块应用加密算法,以便创建另一个有效图像,然后写下图像转换为 PNG。就所有意图和目的而言,新图像只是一张图像 - 但它当然看起来像噪点,需要解密才能恢复原始图像。
  • @Spudley: Steganography
  • 重点是,当您使用 RSA(或 ElGamal)加密图像内容并显示时,您的眼睛仍然能够检测到图像的整体轮廓。

标签: php encryption png


【解决方案1】:

最近我在 C++ 中做了类似的事情。我没有更改IDAT,而是添加了带有压缩和加密图像的自定义块(例如命名为xRSA)(无论如何,这种加密是特定于应用程序的)。

我最初能够使用 3rd 方库将图像(灰色背景和通知该图像已加密的文本)保存在 PNG 中。然后我在这个文件中附加了自定义块(记住 IEND 块)。

在 PHP 中按照这种方式,您可以使用imagecreatetruecolor()(通常为 GD)生成背景(可能不完全是灰色,但有些噪点看起来更酷),然后在自定义块中添加原始加密图像。

对不起我的英语,我希望我能帮上忙。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2021-09-03
    • 2022-08-19
    • 2022-01-11
    • 1970-01-01
    • 2018-02-27
    • 2011-11-09
    • 1970-01-01
    相关资源
    最近更新 更多