【问题标题】:JPG Images Lose Quality When DES EncryptingDES 加密时 JPG 图像质量下降
【发布时间】:2013-08-14 02:37:15
【问题描述】:

我正在使用 PyCrypto Python 库尝试使用密码加密 .jpg 图像文件。然而,每当我解密文件并打开它时,它看起来就像一道彩虹,虽然你可以隐约看到原始图像,但它看起来一点也不像。我想知道质量在哪里丢失?我的猜测是,当我填充文件时(你知道,因此长度是 8 的倍数,这是 DES 需要的),我使用 '{' 字符这样做,当我解密文件时,我使用decryptedFileText .replace('{',''),你知道,去掉填充字符,但同时,我可能会删除其他对图像质量至关重要的 '{' 字符。我想知道是否有人知道一种可以解决此问题的填充文件的方法,或者我是否完全错过了这个问题。

【问题讨论】:

  • 如果删除图像中的 '{' 字节,则剩余的像素数据将被偏移并错误解释。这就是你的输出失真的原因。

标签: python image encryption


【解决方案1】:

当您填充文件时,请确保填充字符与文件中的最后一个字节不同。删除填充时,从文件末尾删除具有相同值的字节,最多连续 8 个。如果原始文件的长度是 8 的倍数,则添加 8 个填充字节,与文件中的最终值不同。

如果您以这种方式填充文件,请不要使用 replace(),它将对整个文件进行操作,而是使用 decryptedFileText = decryptedFileText.rstrip(decryptedFileText[-1]) 之类的东西。

【讨论】:

  • 非常感谢!我应该想到这样做。问题是您如何知道文件末尾的字符中有多少是填充字符,哪些实际上是文件的一部分?所以你是说我应该检查文件中的最后一个字符并相应地更改焊盘?问题是我正在填充一组图像。如何使用正确的填充字符标记文件?
  • 检查文件中的最后一个字节,并为您的填充字符选择任何其他值。如果文件长度是 8 的倍数,则添加 8 个填充字节;否则,填充直到长度为 8 的倍数。对于删除填充,您不需要知道它是什么;只需从文件末尾删除彼此匹配的值。这保证了文件以最多 8 个相同值的填充字符结尾,与未填充文件的最后一个非填充字节不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多