【问题标题】:Steganography gone wrong [closed]隐写术出错了[关闭]
【发布时间】:2013-06-07 01:29:41
【问题描述】:

所以,正如您在左上角看到的那样,有变色。这违背了隐写术的目的。
我很确定这与我在图像中隐藏文本的方式有关。这是我的做法,使用Processing

void hide(PImage payload,PImage carrier){
  if(payload.width > carrier.width){
   print("Carrier can not be smaller than payload");
   return; 
  }

  for(int x = 0; x < payload.width; x++){
   int payloadPixel = payload.pixels[x];
   int carrierPixel = carrier.pixels[x];

   carrierPixel = carrierPixel & 0xFFFFFF00;
   payloadPixel = payloadPixel & 0x000000FF;
   carrierPixel = carrierPixel | payloadPixel;

   carrier.pixels[x] = carrierPixel;  
  }
  carrier.updatePixels();
  carrier.save("newTulips.JPG");
}  

我能做些什么让它隐藏得更好?

【问题讨论】:

  • 这个不清楚;您是在问代码中的错误在哪里,还是在寻求更好的机制?
  • @OliCharlesworth 更好的机制
  • 我想做得更好需要图像分析技术,以尽可能减少干扰......祝你好运!
  • @fge 你能告诉我更多吗?
  • 虽然我不知道任何具体的技术/算法,但我相信诀窍是分析相邻像素以确定您可以废弃多少位以便插入自己的(在这里,您总是废弃 8 32);但是这样的过程无论如何都是单向的,除非您可以将更改像素的矩阵与原始图像一起发送,这完全违背了隐写术的目的:(

标签: java image-processing processing steganography


【解决方案1】:

在进行隐写术时,请不要使用有损压缩(作为您的 JPEG)。使用无损或未压缩的图像(如 PNG)。

另外请注意,使用隐写术意味着您必须仅使用最低位而不是完整字节来隐藏您的信息。如果您为信息使用完整的颜色通道,您将在图像中看到此类伪影。

【讨论】:

  • 好的。我会努力并让你知道。那么,如果我想在其中隐藏数据,carrier 图像应该有多大?一定有关系
  • 如果您只使用最低有效位并且还使用 alpha 通道,您可以将 4 位放入一个像素中。因此,您需要每字节信息两个像素。
【解决方案2】:

在我看来,这是你应该做的:

  • 使用来自数码相机的图像,未经编辑。数码相机总是有一些背景噪音可以隐藏你的人工噪音。您的原始图像几乎没有噪点,因此很容易检测到更改。
  • 只使用每种颜色的最后一位。这样,您的数据就会变得更像噪音。当然,这意味着如果您有大量数据,则每个数据需要更多图像。
  • 在隐藏之前加密数据。这样,您可以防止明文中的模式在图像中变得可见。

当然还有:

  • 切勿同时保留包含机密数据的图像和原始图像,否则人们可以通过比较两者来检测您的隐藏数据。

【讨论】:

    猜你喜欢
    • 2017-08-16
    • 2013-04-13
    • 2013-04-21
    • 2012-03-30
    • 2013-03-14
    • 2012-01-03
    • 2014-09-03
    • 2014-07-11
    • 2020-03-12
    相关资源
    最近更新 更多