2017-03-01 42 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