首页 > 解决方案 > 使用隐写术将图像隐藏在图像中

问题描述

我正在尝试一个程序来隐藏图像内部的图像,方法是用我在这里找到的秘密图像的 MSB 替换目标图像的 RGB 分量的 LSB https://towardsdatascience.com/steganography-hiding-an-image-inside -another-77ca66b2acb1 我正在尝试在 Java 中执行此操作。隐藏的图像似乎很好地隐藏在目标图像内,但检索到的图像似乎弄乱了像素。

隐藏图片的代码

for(int y=0 ; y<orHeight ; y++)
    {
        for(int x=0 ; x<orWidth ; x++)
        {
            //RData[],GData[],BData[] are storing the red, green and blue component respectively for ecach pixel of target image which is then being converted to 8 bit binary string.     
            RHString[n] = Integer.toBinaryString(RData[n]);
            RData[n]= Integer.parseInt(RHString[n]);
            RHString[n] = String.format("%08d",RData[n]);
            
            
            GHString[n] = Integer.toBinaryString(GData[n]);
            GData[n]= Integer.parseInt(GHString[n]);
            GHString[n] = String.format("%08d",GData[n]);
            
            
            BHString[n] = Integer.toBinaryString(BData[n]);
            BData[n]= Integer.parseInt(BHString[n]);
            BHString[n] = String.format("%08d",BData[n]);
            
    //oRData[],oGData[],oBData[] are storing the red, green and blue component respectively for ecach pixel of image to be hidden.      
            ROString[n] = Integer.toBinaryString(oRData[n]);
            oRData[n]= Integer.parseInt(ROString[n]);
            ROString[n] = String.format("%08d",oRData[n]);
            
            
            GOString[n] = Integer.toBinaryString(oGData[n]);
            oGData[n]= Integer.parseInt(GOString[n]);
            GOString[n] = String.format("%08d",oGData[n]);
            
            
            BOString[n] = Integer.toBinaryString(oBData[n]);
            oBData[n]= Integer.parseInt(BOString[n]);
            BOString[n] = String.format("%08d",oBData[n]);
            
            
            
            
            RHString[n] = RHString[n].substring(0,4)+ROString[n].substring(0,4);
            GHString[n] = GHString[n].substring(0,4)+GOString[n].substring(0,4);
            BHString[n] = BHString[n].substring(0,4)+BOString[n].substring(0,4);
            //converting binary string to decimal integer using Integer.parseInt() 
            RData[n]= Integer.parseInt(RHString[n],2);
            GData[n]= Integer.parseInt(GHString[n],2);
            BData[n]= Integer.parseInt(BHString[n],2);
            
            
            n++;

            

            
        }
    }
    
            n=0;
    for(int y=0 ; y<orHeight ; y++)
    {
        for(int x=0 ; x<orWidth ; x++) {
        
            Color newC = new Color(RData[n], GData[n],BData[n]);
            orImage.setRGB(x,y,newC.getRGB());
            
            
            Color c = new Color(orImage.getRGB(x,y), true);// Color class will return the colour of that pixel specified by x,y coordinates
            
            
            n++;
        }
    }
    

检索图像的代码(它是一个单独的代码,将输入作为在前面代码中创建的图像)

    int n = 0;
    for(int y=0 ; y<hiHeight ; y++)
    {
        for(int x=0 ; x<hiWidth ; x++)
        {
            
            RHString[n] = Integer.toBinaryString(RData[n]);
            RData[n]= Integer.parseInt(RHString[n]);
            RHString[n] = String.format("%08d",RData[n]);
            
            
            GHString[n] = Integer.toBinaryString(GData[n]);
            GData[n]= Integer.parseInt(GHString[n]);
            GHString[n] = String.format("%08d",GData[n]);
            
            
            BHString[n] = Integer.toBinaryString(BData[n]);
            BData[n]= Integer.parseInt(BHString[n]);
            BHString[n] = String.format("%08d",BData[n]);
            
            
                            
            RHString[n] = RHString[n].substring(4,8)+"0000";
            GHString[n] = GHString[n].substring(4,8)+"0000";
            BHString[n] = BHString[n].substring(4,8)+"0000";
            
            //converting binary string to decimal integer using Integer.parseInt() 
            RData[n]= Integer.parseInt(RHString[n],2);
            GData[n]= Integer.parseInt(GHString[n],2);
            BData[n]= Integer.parseInt(BHString[n],2);
            n++
        }
    }
    
    n=0;
    for(int y=0 ; y<hiHeight ; y++)
    {
        for(int x=0 ; x<hiWidth ; x++) {
        
            Color newC = new Color(RData[n], GData[n],BData[n]);
            hidImage.setRGB(x,y,newC.getRGB());
            n++;
        }
    }

标签: javasteganography

解决方案


推荐阅读