Versão atual:

Ler todos os pixels de uma imagem

Bom dia, estou fazendo um trabalho em java onde preciso criptografar uma imagem, salvar a criptografia em um arquivo jpg, decriptografar este arquivo e salvar o arquivo decriptografado em outra pasta.

Estou lendo as bandas de RGB (não sei se estou fazendo certo), mas não está lendo o arquivo inteiro, só uma banda dele. Na hora de salvar, ele cria um arquivo jpg nas pastas, mas não os arquivos criptografados e decriptografados.

public class EncriptaDecriptaAES {

    static String IV = "AAAAAAAAAAAAAAAA";
    static String chaveencriptacao = "0123456789abcdef";

    public static void main(String[] args) {
        try {
            Raster raster;
            EncriptaDecriptaAES aux = new EncriptaDecriptaAES();
            BufferedImage imagem = ImageIO.read(new File("D:/Área de Trabalho/onibus.jpg"));  

            raster = imagem.getRaster();
            int altura = imagem.getHeight();
            int largura = imagem.getWidth();
            int pixels[] = new int[altura * largura];
            int bandaInt;
            String banda[] = new String[imagem.getRaster().getNumBands()];
            String bandaBinaria;
            int k = 0;
            for (int l = 0; l < largura; l++) {
                for (int z = 0; z < altura; z++) {
                    raster.getPixel(l, z, pixels);
                    k++;
                }
            }
            banda[0] = "" + pixels[0] + pixels[1] + pixels[2];  //Banda RGB (255,255,255)
            bandaInt = Integer.parseInt(banda[0]);               //Converte a banda que esta em string para int 
            bandaBinaria = Integer.toBinaryString(bandaInt);        //converte a banda int para binario

            String imagemOriginal = "" + bandaBinaria; 


            byte[] imagemencriptada = encrypt(imagemOriginal, chaveencriptacao);
            System.out.println("Encriptada: " + imagemencriptada);
            aux.salvaImagemEncriptada(imagemencriptada);  
            String imagemdecriptada = decrypt(imagemencriptada, chaveencriptacao);
            System.out.println("Decriptada: " + imagemdecriptada);
            aux.salvaImagemDecriptada(imagemdecriptada.getBytes());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static byte[] encrypt(String textopuro, String chaveencriptacao) throws Exception {
        Cipher encripta = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
        SecretKeySpec key = new SecretKeySpec(chaveencriptacao.getBytes("UTF-8"), "AES");
        encripta.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV.getBytes("UTF-8")));
        return encripta.doFinal(textopuro.getBytes("UTF-8"));
    }

    public static String decrypt(byte[] textoencriptado, String chaveencriptacao) throws Exception {
        Cipher decripta = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
        SecretKeySpec key = new SecretKeySpec(chaveencriptacao.getBytes("UTF-8"), "AES");
        decripta.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV.getBytes("UTF-8")));
        return new String(decripta.doFinal(textoencriptado), "UTF-8");
    }

    private void salvaImagemEncriptada(byte[] img) throws IOException {
        String caminhoSalvar = "C:/ImagensCrip/img1.jpg";
        File file = new File(caminhoSalvar);
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
        bos.write(img);
        bos.close();
    }

    private void salvaImagemDecriptada(byte[] img) throws IOException {
        String caminhoSalvar = "C:/Área de Trabalho/ImagensDecrip/img1.jpg";
        File file = new File(caminhoSalvar);
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
        bos.write(img);
        bos.close();
    }
}

Se alguém puder me ajudar

Versões(2):

Ver a versão formatada

Ler todos os pixels de uma imagem

Comentário

new question