使用java解密图像

时间:2013-12-23 05:19:47

标签: java encryption

我从YouTube视频中获取此代码。从此代码我正确加密图像但无法解密该图像.. 任何人都可以帮助我吗?

加密代码

        FileInputStream  file = new FileInputStream("src/image/A.jpg");
        FileOutputStream output = new FileOutputStream("src/image/AA.jpg");
        byte j[]="12345678".getBytes();
        SecretKeySpec kye = new SecretKeySpec(j,"DES");
        System.out.println(kye);
        Cipher enc = Cipher.getInstance("DES");
        enc.init(Cipher.ENCRYPT_MODE,kye);
        CipherOutputStream cos = new CipherOutputStream(output, enc);
        byte[] buf = new byte[1024];
        int read;
        while((read=file.read(buf))!=-1){
            cos.write(buf,0,read);
        }
        file.close();
        output.flush();
        cos.close();

解密代码

        FileInputStream  file = new FileInputStream("src/image/AA.jpg");
        FileOutputStream output = new FileOutputStream("src/image/AAA.jpg");
        byte j[]="12345678".getBytes();
        SecretKeySpec kye = new SecretKeySpec(j,"DES");
        System.out.println(kye);
        Cipher enc = Cipher.getInstance("DES");
        enc.init(Cipher.DECRYPT_MODE,kye);
        CipherOutputStream cos = new CipherOutputStream(output, enc);
        byte[] buf = new byte[1024];
        int read;
        while((read=file.read(buf))!=-1){
            cos.write(buf,0,read);
        }
        file.close();
        output.flush();
        cos.close();

谢谢

1 个答案:

答案 0 :(得分:1)

这是一个相对较老的帖子,但我想我可以提供帮助。

首先,您应该将Image编码为ASCII表示。我推荐Base64。加密Base64时,它更容易,附加错误更少。 (也许不是那么强,但这取决于你的需求)

Base64的好处是它正在使用的Alphabet。根本没有奇怪的符号。

1)通过将ImageIO类写入一个,将图像转换为ByteArrayOutputStream。

2)将字节数组编码为Base64字符串

3)像上面那样进行加密(不要忘记刷新)。

4)将字节保存到新文件。删除旧的。

相应地解密.....

请注意,编码到Base64会炸毁你的内存,因为Base64和加密开销,文件会更大。

希望有所帮助!