2015-04-22 157 views
0

我正在爲PC製作一款Java遊戲的2D遊戲,並且此遊戲包含精靈,音效,音樂和文本等數據。Java遊戲的加密圖像格式

問題是我需要以某種方式存儲它。

現在我需要以加密格式存儲我的小精靈,並且我需要我的Java遊戲解密並加載加密的圖像至bufferedimages以在我的遊戲中顯示它們。

我不想將所有內容封裝到單個可執行文件.jar或.exe文件中。

我需要讓我的圖像(資源,Spritesheets)加密和安全,因爲我不想讓玩家干擾他們或使用他們。

我不能使用,甚至使用一些 不大不小的Java庫的加密或加保護的ZIP文件,因爲Java必須將它們首先導出盤 就可以使用它

我面前搜索了很多論壇,我找不到明確的答案。

+1

沒有默默無聞的安全性。如果你想保護你的圖像免受篡改使用散列。如果你想禁止第三方使用它,這是一個版權問題。如果您在某些時候顯示圖像,則可以製作截圖並以這種方式獲取圖像。此外,Java代碼可以很容易地反編譯,這樣任何擁有Java知識的人都可以解碼您的圖像。你正在爲完全無用的功能付出很多努力。 – konqi

回答

0

根據您想要的加密類型 - 您可以使用ImageIO將圖像寫入/讀取到輸出和輸入流,並將結果字節和解密/加密。

要保存圖像,請使用ImageIO將圖像寫入OutputStream(例如ByteArrayOutputStream)。從字節寫的,你可以加密,然後保存

​​

要閱讀和解密,只需讀取文件的字節,解密字節,則字節流發送到ImageIO的

InputStream is = null; 
    ByteArrayOutputStream os = null; 
    ByteArrayInputStream input = null; 
    try{ 
     is = new FileInputStream(inputFile); 
     os = new ByteArrayOutputStream(); 
     byte[] buffer = new byte[500]; 
     int len = -1; 
     while ((len = is.read(buffer)) != -1){ 
      os.write(buffer, 0, len); 
     } 
     byte[] fileBytes = os.toByteArray(); 
     decrypt(fileBytes); 
     input = new ByteArrayInputStream(fileBytes); 
     Image image = ImageIO.read(input); 
    }catch(IOException io){ 
     io.printStackTrace(); 
    }finally{ 
     if (is != null){try{is.close();}catch(Exception e){}} 
     if (os != null){try{os.close();}catch(Exception e){}} 
     if (input != null){try{input.close();}catch(Exception e){}} 
    } 

您使用的加密類型是您的選擇。您可以使用一個簡單的加密程序,採用按位異或字節數組加密(^)

for (int i = 0; i < bytes.length; i++){ 
    bytes[i] = (byte)(bytes[i]^123); 
} 

或使用Cipher

注意,對於動畫gif文件,你可能需要尋找一個更看中的加密保存gif幀的方法(例如見this

+0

對於一個簡單的逐字節密碼(即流密碼)嘗試[RC4](http://en.wikipedia.org/wiki/RC4)。它已經過時了,但對於你似乎需要的可能足夠安全。對於更安全,重負荷更高的應用,請在CTR模式下使用AES。 – rossum