java - 如何加密 BufferedImage 使其只能由程序读取?

标签 java encryption bufferedimage

我在一个名为 Buffers 的类中有这个方法:

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/");
<小时/>

我想知道是否有一种方法可以只加载加密图像,然后仅在调用此方法时才解密。

如果对我想问的内容有任何疑问,请告诉我。

谢谢!

最佳答案

加密文件的一种方法是使用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;
}

关于java - 如何加密 BufferedImage 使其只能由程序读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42537177/

相关文章:

java - 如何检查两个缓冲图像是否相等,忽略白色?

java - 找不到变量(继承问题)

java - MyBatis 集合转 Array 类型

java - 通信链路故障,本地主机上的 MySQL 数据库未连接

java - 图像文件的加密与解密

encryption - AES加密,什么是公钥和私钥?

java - 自定义形状的透明按钮

java - 缓存文件服务器

java - 查找文本文件中最常见的名称

c - 对于 CTR 模式,我是否需要输出缓冲区为 AES block 大小的倍数?