隐写术出了问题

Lit*_*ild 1 java processing steganography image-processing

在此输入图像描述

所以,正如你在左上角看到的那样,有变色.这违背了隐写术的目的.
我很确定这与我在图像中隐藏文本的方式有关.我是这样做的,使用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");
}  
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能让它更好地隐藏?

Uwe*_*nus 5

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

另请注意,使用隐写术意味着您必须仅使用最低位而不是完整字节来隐藏您的信息.如果您使用完整的颜色通道获取信息,您将在图像中获得此类工件.


the*_*ejh 5

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

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

而且当然:

  • 永远不要同时保存包含秘密数据和原始图像的图像,否则人们可以通过比较两者来检测您的隐藏数据.