【问题标题】:php image steganography nearly same startphp图像隐写术几乎相同的开始
【发布时间】:2014-01-20 12:07:16
【问题描述】:

我正在开发一个 php 脚本,它对给定的文本进行编码并使用 LSB 将其隐藏在图像中。但是编码的文本是一个字节数组(使用 mcrypt 和 rijndael-256 加密的文本,然后用 unpack("C*", $encryptedText); 解包)我有 tp 在数组的开头添加数组大小。如果我不这样做,以后再次从图像中读取字节会很糟糕,因为脚本不知道在哪里停止读取。我使用这些代码行在数组的开头添加了大小信息:

$size = count($byteArray); array_unshift($byteArray, $size >> 24, ($size & 0xff0000) >> 16, ($size & 0xff00) >> 8, $size & 0xff);

所以大小以整数格式(4字节)添加,但现在创建的每个图像都具有第一个隐藏字节主要以零开头的特征,因为$size大多在60000或更低的范围内。有什么办法可以编码大小或更改程序的其他部分,使其正常工作,并且字节的开头每次都几乎不一样?

【问题讨论】:

  • 您能指定“大部分为 60000 或更低”吗?如果它每次都低于 60000 (65536),即 4 个字节中有 2 个字节,则可以只用随机数填充另外 2 个字节。
  • 对不起,我没有提到。 size 是用户提交的文本的大小。在大多数情况下,它肯定会远低于 60000 个字符,但如果用户想要 tp 加密更大的文本,它也可能超过 1000000 个。但是在实际内容之前添加一些随机数是一个非常好的主意。非常感谢。

标签: php gd steganography


【解决方案1】:

您可以使用第一个字节的最后两位来编码您需要为$size 读取的字节数,而不是始终使用前 4 个字节来编码消息的长度。例如,00 = 1、01 = 2、10 = 3 和 11 = 4。例如,如果 $size 小到可以仅用两个字节表示,则前几个字节将如下所示:

  • 第一个字节:xxxxxx01
  • 第二个和第三个字节:$size
  • 第四个字节及以后:ByteArray...

您可以使用随机嵌入方法进一步增加趣味性。您可以使用伪随机数生成器或混沌映射,例如Logistic MapTent Map。收据将需要种子或初始条件参数来破译以什么顺序读取字节以提取消息。例如,考虑 5 个字节嵌入数据和 0 到 1 之间生成的 5 个数字。

(0.2843, 0.5643, 0.0904, 0.4308, 0.9866)

按升序对数字进行排序会给您以下顺序,您可以使用它来嵌入您的秘密:

(3, 1, 4, 2, 5)

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 2015-06-02
    • 2014-01-24
    • 2014-02-18
    • 2013-01-24
    • 2018-07-02
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多