Duda algoritmo Rijndael/ECB/PKCS5Padding

B

Esto básicamente coge una cadena de texto la encripta y la desencripta, pero como tendría que hacerlo para que hiciera lo mismo pero creando un fichero, encriptandolo y luego desencriptandolo?

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64.*;

//import org.apache.commons.codec.binary.Base64;

public class Ficheros {

public static String encrypt(String input, String key) {
	byte[] crypted = null;
	try {
	
		SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
		
		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		cipher.init(Cipher.ENCRYPT_MODE, skey);
		crypted = cipher.doFinal(input.getBytes());
	} catch (Exception e) {
		System.out.println(e.toString());
	}
	java.util.Base64.Encoder encoder = java.util.Base64.getEncoder();
	
	return new String(encoder.encodeToString(crypted));
}

public static String decrypt(String input, String key) {
	byte[] output = null;
	try {
		java.util.Base64.Decoder decoder = java.util.Base64.getDecoder();
		SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		cipher.init(Cipher.DECRYPT_MODE, skey);
		output = cipher.doFinal(decoder.decode(input));
	} catch (Exception e) {
		System.out.println(e.toString());
	}
	return new String(output);
}

/**
 * @param args
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub
	
	String key = "mvLBiZsiTbGwrfJB";
	String data = "ABC";

	System.out.println(Ficheros.encrypt(data, key));
	System.out.println(Ficheros.decrypt(Ficheros.encrypt(data, key), key));
}

}

aren-pulid0

Lo que no sabes es pasar un fichero al algoritmo?

En vez de data tiene que ser un File, y dentro de los métodos tendrás que leerlo línea a línea o del tirón con un scanner o un inputstream

Ranthas

Si tienes ficheros que solo contienen texto, y quieres encriptar ese texto, pues esto.

Si lo que quieres es transformar el fichero en una cadena en base64, y encriptar esa cadena, pues esto

Es buscar en google, no tiene en absoluto nada que ver con el algoritmo de encriptación que estás usando.

1 1 respuesta
desu

Pasalo a bytes, te pongo un codigo.

spoiler

No se si hay que usar la api de SecuritLayer que hacer el aes o import java.security.MessageDigest; para hacer digests. stack overflow

Necesitas un AES o un hash? Si no me falla la memoria para un ficheros largo usabas aes para que no hubiese overflow metiendo una key lo suficientemente larga. sobre el base64 vs usar un sha con base64 la longitud varia con el sha tienes una longitud fija. A parte del tema de colisiones y dificultad para romperlo, no si es esto es relevante para tu ejercicio pero tenlo en cuenta.

2 1 respuesta
B

#3 en la descripcion del ejercicio , específica claramente que tiene que ser usando ese algoritmo, fallo mío por no ponerlo.

#4 Gracias, necesito un AES, tu código me ha servido mucho. Gracias por la ayuda :)

gracias a todos por las respuestas

Usuarios habituales