用java中的RC4加密图像

用java中的RC4加密图像,java,image,encryption,Java,Image,Encryption,我试图用RC4加密bmp图像,但加密后的图像与原始图像没有太大区别 公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{ try{ File bmpFile = new File("C:\\Users\\acer\\Desktop\\py\\6.bmp"); BufferedImage image = ImageIO.read(bmpFile); int width

我试图用RC4加密bmp图像,但加密后的图像与原始图像没有太大区别

公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{

try{
        File bmpFile = new File("C:\\Users\\acer\\Desktop\\py\\6.bmp");
        BufferedImage image = ImageIO.read(bmpFile);
        int width          = image.getWidth();
        int height         = image.getHeight();

        int[][] pixels = new int[width][height];

        for( int i = 0; i < width; i++ )
            for( int j = 0; j < height; j++ )
                 pixels[i][j] = image.getRGB( i, j );

        int []key ={100,70,600,878};
        int []t =new int[256];
        int []s =new int[256];

        for(int i=0;i<s.length;i++)
            s[i]=i;

        for(int i=0;i<t.length;i++)
            t[i]=key[i%key.length];


        int j=0;
        for(int i=0;i<s.length;i++){

            j=(j+s[i]+t[i])%s.length;
            int temp=s[i];
            s[i]=s[j];
            s[j]=temp;

        } 
        int tt;
        int k;
        j=0;
        int i=0;
        for(int c=0;c<width;c++){
           for(int cc=0;cc<height;cc++){
            i = (i + 1) % s.length;
            j = (j + s[i]) % s.length;
            int temp=s[i];
            s[i]=s[j];
            s[j]=temp;
            tt = (s[i] + s[j]) % 256;
            k = s[tt];
            pixels [c][cc]=pixels[c][cc] ^ k;
            }
        } 
        for(  i = 0; i < width; i++ )
            for( j = 0; j < height; j++ )
                image.setRGB(i, j, pixels[i][j]);

        bmpFile = new File("C:\\Users\\acer\\Desktop\\py\\66.bmp");
        ImageIO.write(image, "bmp", bmpFile);


    }
    catch (IOException e){
         System.out.println(e.getMessage());
    }
 } 
试试看{
File bmpFile=新文件(“C:\\Users\\acer\\Desktop\\py\\6.bmp”);
BuffereImage image=ImageIO.read(bmpFile);
int width=image.getWidth();
int height=image.getHeight();
int[][]像素=新int[宽度][高度];
对于(int i=0;i对于(int i=0;iOk),我的答案是:在定义像素的循环中,需要对每个频带R、G、B应用异或:

    for(int c=0;c<width;c++){
       for(int cc=0;cc<height;cc++){
        i = (i + 1) % s.length;
        j = (j + s[i]) % s.length;
        int temp=s[i];
        s[i]=s[j];
        s[j]=temp;
        tt = (s[i] + s[j]) % 256;
        k = s[tt];
        int R=(pixels [c][cc]&0xff0000)>>16, G=(pixels [c][cc]&0x00ff00)>>8, B=(pixels [c][cc]&0x0000ff);
        R=R ^ k;
        G=G ^ k;
        B=B ^ k;
        pixels [c][cc]=(R<<16)|(G<<8)|B;
        }
    } 
for(intc=0;c16,G=(像素[c][cc]&0x00ff00)>>8,B=(像素[c][cc]&0x0000ff);
R=R^k;
G=G^k;
B=B^k;
像素[c][cc]=(R