2017-03-01 37 views
0

我有这样的方法在这里一类名为缓冲区:我如何加密BufferedImage才能被程序读取?

private static BufferedImage load(String s){ 
    BufferedImage image; 
      try{ 
       image = ImageIO.read(Buffers.class.getResourceAsStream(s)); 
       return image; 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
      return null; 
} 

这一切都在项目中的图形内容用来加载图像。例如:

public static BufferedImage background = load("/path/"); 

我想知道是否有一种方法可以仅负载加密图像,然后当用这种方法称为仅解密。

如果对我想问什么有任何疑问,请告诉我。

谢谢!

+0

的问题是,你也很难隐藏解密密钥。如果它在Jar中的任何地方,人们可以找到它并使用它来解密图像。 – RealSkeptic

+0

@RealSkeptic,但我要混淆jar文件难以获取密钥......我不想让它不可能解密。 – Dormin

回答

0

办法有加密的文件是使用CipherInputStreamCipherOutputStream

private BufferedImage load(String s){ 
BufferedImage image; 
     try{ 
      image = ImageIO.read(getDecryptedStream(Buffers.class.getResourceAsStream(s))); 
      return image; 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return null; 
} 

private InputStream getDecryptedStream(InputStream inputStream) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException{ 
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 
    cipher.init(Cipher.DECRYPT_MODE, this.key); 
    CipherInputStream input = new CipherInputStream(inputStream, cipher); 

    return input; 
} 

使用的OutputStream将文件保存

private OutputStream getEncryptedStream(OutputStream ouputStream) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException{ 
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 
    cipher.init(Cipher.ENCRYPT_MODE, this.key); 
    CipherOutputStream output = new CipherOutputStream(ouputStream, cipher); 

    return output; 
} 
+0

谢谢你的男人!有效 !!非常感谢 !!!! ^^ – Dormin

+0

如何投票评论你的评论?我在这里有点新手... – Dormin