【问题标题】:How to apply a termination condition while extracting encrypted message?如何在提取加密消息时应用终止条件?
【发布时间】:2022-01-26 12:46:03
【问题描述】:

首先,我想使用 AES 密码用密钥加密消息。 然后将加密消息的每个字节隐藏在随机像素中,并通过完全替换像素的一个随机分量(红色或绿色或蓝色)来隐藏。

我使用secureRandom通过提供种子来为AES/CBC/PKCS5Padding生成相同的图像像素和IV。假设没有两次生成像素来存储字节。

现在我想提取它。 提取时,我将使用secureRandom和相同的种子生成相同的像素。

应该是什么终止条件才能让我停在最后一个隐藏字节的像素处? 在嵌入部分,加密消息的长度是终止。 如果可能,我们如何为提取应用终止条件?

或者有什么方法可以嵌入,以便我们以后可以从那些随机像素中提取?

【问题讨论】:

  • 加密文件时的“终止条件”是什么?
  • @hfontanez 加密是消息长度,嵌入是加密消息长度。
  • 你为什么不发布你的解密代码并让我们找出它有什么问题呢?如果您还没有编写任何代码,我可以向您保证,不会有多少人愿意帮助您。在今天的 StackOverflow 中,人们在结束“坏问题”方面更加积极。您需要发布最少的、可重现的代码。
  • @hfontanez 好的。但是加解密代码有必要吗?因为我需要提取。我认为嵌入代码会很有用。
  • 我会发布这两个只是为了确保。而且,如果您附上测试文件,也不会受到伤害。如果您同时发布两者,也许您不需要附加测试文件,因为任何人都应该能够对任何图像文件进行“往返”。

标签: java cryptography extract steganography


【解决方案1】:

只需评估密文的长度并将其存储在目标结构中,但在固定位置。在解密阶段,读取此大小信息作为要检索的字节数的计数器。作为替代解决方案,您可以依靠密文以多个固定长度的块(取决于使用的算法和密钥大小)写入的事实。您可以尝试逐块读取和解密,直到获得有效的解密文本或数据不足。

编辑:

这是一个简单的计算:

假设您的密文长度为 1024 字节,并且您使用 int 作为长度信息,而不是至少需要 1024 + 4 字节来存储信息。 假设您将密文隐藏在 12345 像素中,并在前 4 像素中存储长度信息,然后存储 1024 像素的密文。如果要检索密文,首先读取四个字节以获取长度,然后读取下一个 length 个字节以获取密文。在给定的示例中,您读取 1028 字节/像素,剩余的 11317 像素/字节不感兴趣。

真的就这么简单,不是吗?

【讨论】:

  • 但是如果密文的长度超过一个字节,假设我们在密文之前存储长度,它会大于1个字节。即使这样,我们也需要生成多个像素并存储。同样,我们需要终止条件。
  • 谢谢 我有同样的想法,但我不确定存储长度。感谢您提醒将整数转换为字节数组的长度始终为 4。我什至没有考虑它。所以,现在我可以从前 4 个随机像素中读取长度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2019-04-27
  • 2018-06-10
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 2017-05-19
相关资源
最近更新 更多