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