Java JPG图像中的隐藏消息
我试图在图像中隐藏一条隐藏消息,它可以与.bmp和.png一起正常工作,但当我以JPG格式编写图像并尝试检索隐藏消息时,它不起作用。 我的程序,首先读取一个格式为bmp、gif、jpg、png的图像,写下消息隐藏并保存它,这样我们就可以再次读取它并提取消息。 当我用bmp或png保存时,效果很好,但用jpg保存并尝试提取消息时,效果不好Java JPG图像中的隐藏消息,java,image,jpeg,steganography,Java,Image,Jpeg,Steganography,我试图在图像中隐藏一条隐藏消息,它可以与.bmp和.png一起正常工作,但当我以JPG格式编写图像并尝试检索隐藏消息时,它不起作用。 我的程序,首先读取一个格式为bmp、gif、jpg、png的图像,写下消息隐藏并保存它,这样我们就可以再次读取它并提取消息。 当我用bmp或png保存时,效果很好,但用jpg保存并尝试提取消息时,效果不好 ImageIO.write(bimg, "png", outputfile);//working ImageIO.write(bimg, "png", ou
ImageIO.write(bimg, "png", outputfile);//working
ImageIO.write(bimg, "png", outputfile);//not working
我应该怎么做才能使它适用于JPEG
注意:我将每个像素读取为带有ARGB值的4位整数,并更改R、G、B的LSB以隐藏消息
public void stegnography(BufferedImage bimg,String msg,String filename)
{
int w=bimg.getWidth();
int h=bimg.getHeight();
//***************************************
// String msg="Hide this message:)";
System.out.println("message="+msg+" length="+msg.length());
//***************************************
if(msg.length()>255 )
{
jLabel3.setText("MESSAGE IS LARGE THAN 255 CHARACTERS");
}
else if( msg.length()*11 >w*h)
{
jLabel3.setText("Image is too small");
}
else{
//-------------------------------------------
byte[] msgbytes= msg.getBytes();
int msglendecode= (bimg.getRGB(0,0)>>8)<<8;
msglendecode |= msg.length();
bimg.setRGB(0, 0,msglendecode );//hidig msg length at first position
//System.out.println("\npixel at position (0,0) ");
// bitpattern(bimg.getRGB(0,0) );
for(int i=1,msgpos=0,row=0,j=0; row<h ;row++ )
{
for(int col=0;col<w && j<msgbytes.length ;col++,i++ )
{
if (i%11==0) {
int rgb = bimg.getRGB(col,row);
int a=((rgb >> 24) & 0xff);
int r = (((rgb >> 16) & 0xff)>>3)<<3;
r=r|(msgbytes[msgpos]>>5);
int g = (((rgb >> 8) & 0xff)>>3)<<3;
g=g|((msgbytes[msgpos]>>2)& 7);
int b = ((rgb & 0xff)>>2)<<2;
b=b|(msgbytes[msgpos]&0x3);
rgb=0;
rgb=(rgb|(a<<24));
rgb=(rgb|(r<<16));
rgb=(rgb|(g<<8));
rgb=(rgb|b);
bimg.setRGB(col,row,rgb);
msgpos++;
j++;
//bitpattern(bimg.getRGB(col,row));
}
}//for 2
}//for 1
ImageIcon image = new ImageIcon(bimg);
jLabel3.setIcon(image);
try {
// File outputfile = new File("c:/Users/yathestha/Documents/"+filename);
File outputfile = new File("c:/Users/yathestha/Documents/outpng.png");
ImageIO.write(bimg, "png", outputfile);
} catch (IOException e) {
System.out.println("error in saving image ");
}
//-------------------------------------------------
}//else
// decoding part----------------------------------------------------------------------
}
///////////////////////////////////////////////////////////////////////
private void decodestegnography(BufferedImage bimg) {
System.out.println("in decode");
int w=bimg.getWidth(),h=bimg.getHeight();
bitpattern(bimg.getRGB(0, 0));
int msglength=(bimg.getRGB(0, 0)&0xff);
bitpattern(msglength);
System.out.println("Message Length="+msglength);
jTextField1.setText("");
for(int row=0,j=0,i=1; row<h ;row++ )
{
for(int col=0;col<w && j<msglength ;col++ ,i++)
{
if (i%11==0) {
int result=bimg.getRGB(col,row);
int charatpos = (((result >> 16) & 0x7) << 5);
charatpos |= (((result >> 8) & 0x7) << 2);
charatpos |= ((result & 0x3));
jTextField1.setText(jTextField1.getText()+ (char)charatpos);
j++;
}
}
}
System.out.println("decoding done");
}//function
您可能必须更改JPEG以获得100%的编码质量-这将显著增加字节大小 有关如何使用可控压缩/质量编码到JPG的信息,请参阅。左侧的滑块用于控制标高
您可能必须更改JPEG以获得100%的编码质量-这将显著增加字节大小 有关如何使用可控压缩/质量编码到JPG的信息,请参阅。左侧的滑块用于控制标高
对于jpeg隐写术,请将结果保存为无损jpeg,或者仅使用不同的隐写术方法。我唯一知道的就是摆弄离散余弦变换系数DCT。但是,您需要注意舍入错误,因此检索您的机密将是有损的
我不喜欢DCT,也没有对它做过太多的研究,但是2007年的一篇论文声称jpeg无损隐写术。请注意,该算法比在空间域中随意替换LSB要复杂得多。在频域中隐藏数据也意味着更低的隐藏容量,我不知道这是否能为您服务。如果您感兴趣并且无法访问该论文,我们可以私下进行整理。对于jpeg隐写术,请将结果保存为无损jpeg,或者简单地使用其他隐写术方法。我唯一知道的就是摆弄离散余弦变换系数DCT。但是,您需要注意舍入错误,因此检索您的机密将是有损的
我不喜欢DCT,也没有对它做过太多的研究,但是2007年的一篇论文声称jpeg无损隐写术。请注意,该算法比在空间域中随意替换LSB要复杂得多。在频域中隐藏数据也意味着更低的隐藏容量,我不知道这是否能为您服务。如果您感兴趣并且无法访问该论文,我们可以私下解决此问题。可能是同样的问题,为了更快获得更好的帮助,发布一篇.JPG是有损的。这意味着它会丢弃一些数据。是什么让你认为你的信息应该能够经受有损压缩?我读到了这篇文章,但应该有一种方法可以做到这一点,因为我想把它应用到facebook的图片封面上。你能解释一下你的代码吗?可能是同样的问题,为了更快地获得更好的帮助,发布一个.JPG是有损的。这意味着它会丢弃一些数据。是什么让你认为你的信息应该能经受有损压缩?我读到了,但应该有办法做到这一点,因为我想把它应用到facebook的图片封面上。你能解释一下你的代码吗?无法访问报纸,我们可以私下解决这个问题。这个答案很好,直到那时。链接的论文是,我只是想把这个应用到Facebook封面图片上,现在看起来有点困难。是的,我在学术界,我可以免费获取论文。我不打算分享我的帐户,但我想作为一个难得的帮助,我可以发送pdf。这完全是我的想法无法访问该文件,我们可以私下解决。这个答案很好,直到那时。链接的论文是,我只是想把这个应用到Facebook封面图片上,现在看起来有点困难。是的,我在学术界,我可以免费获取论文。我不打算分享我的帐户,但我想作为一个难得的帮助,我可以发送pdf。这完全是我的想法