Java游戏的加密图像格式

时间:2015-04-22 21:03:05

标签: java encryption

我正在用PC制作一个用于PC的2D游戏,这个游戏有精灵,声音效果,音乐和文本等数据。

问题是我需要以某种方式存储它。

现在我需要以加密格式存储我的精灵,我需要我的Java游戏解密并加载加密图像到bufferedimages以在我的游戏中显示它们。

我不想将所有内容封装到单个可执行文件.jar或.exe文件中。

我需要对我的图像(资源,Spritesheets)进行加密和保护,因为我不希望播放器干扰它们或使用它们。

  

我不能使用ZIP文件甚至加密或受保护的文件   一种Java库,因为Java必须首先在光盘上导出它们   在它使用之前

我搜索了很多论坛,但我找不到明确的答案。

1 个答案:

答案 0 :(得分:0)

根据您考虑的加密类型 - 您可以使用ImageIO将图像写入/读取到输出和输入流,获取结果字节并进行解密/加密。

要保存图像,请使用ImageIO将图像写入OutputStream(例如ByteArrayOutputStream)。从写入的字节,您可以加密,然后保存

    ByteArrayOutputStream os = null;
    OutputStream fos = null;
    try{
        os = new ByteArrayOutputStream(); 
        ImageIO.write(image, "jpg", os);
        byte[] bytes = os.toByteArray();
        encrypt(bytes);
        fos = new FileOutputStream(outputfile);
        fos.write(bytes);
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        if ( fos != null ){try{fos.close();}catch(Exception e){}}
        if ( os != null ){try{os.close();}catch(Exception e){}}//no effect, but hear for sanity's sake
    }

要读取和解密,只需将文件读取为字节,解密字节,然后将字节流发送到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