Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Cifrar un archivo añadiendo clave envuelta en un único archivo

Estas en el tema de Cifrar un archivo añadiendo clave envuelta en un único archivo en el foro de Java en Foros del Web. Hola! (Link StackOverflow https://stackoverflow.com/questions/29239854/encrypt-a-file-appending-wrapped-key-in-unique-file) La idea de lo que estoy intentando hacer es lo siguiente: Tenemos: - Archivo de N bytes - Clave AES de ...
  #1 (permalink)  
Antiguo 25/03/2015, 06:19
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Pregunta Cifrar un archivo añadiendo clave envuelta en un único archivo

Hola! (Link StackOverflow https://stackoverflow.com/questions/29239854/encrypt-a-file-appending-wrapped-key-in-unique-file)
La idea de lo que estoy intentando hacer es lo siguiente:
Tenemos:
- Archivo de N bytes
- Clave AES de 256 bytes
- Pareja de claves RSA.

La idea es:
1 - cifrar el archivo en bloques de 1024 Bytes con la clave AES
2 - cifrar la clave AES con la clave publica RSA
3 - Añadir lla clave cifrada (wrapped key) al principio del archivo

Ahora tenemos un archivo cifrado en que los primeros 256 Bytes son la llave cifrada y el resto del archivo esta cifrado en bloques de 1024 bhytes.

Para descifrar:
1 - Recuperar los primeros 256 bytes.
2 - Desencriptarlos usando la llave privada. De este modo hemos recuperado la llave AES que tenemos que usar para descifrar el resto del archivo

Y ahora la pregunta!!!

Como puedo descifrar el resto del archivo, en bloques de 1024, sin tener en cuenta los primeros 256 bytes?????



El codigo de como lo hago esta en el stackOverflow... Estoy muy confuso y no lo consigooooo!!!!
https://stackoverflow.com/questions/29239854/encrypt-a-file-appending-wrapped-key-in-unique-file

LA pregunta no es una cuestion de cifrado, la cuestion es una cuestion de como acceder a un archivo binario en bloques i a con un offset de n bytes...

Gracias de antemano!
  #2 (permalink)  
Antiguo 25/03/2015, 06:47
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Cifrar un archivo añadiendo clave envuelta en un único archivo

No sé si habrá métodos pensados para hacer lo que buscas, pero ¿por qué no pruebas a recuperar todo el fichero como bytes y lo partes en dos arrays con los que trabajar?
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 25/03/2015, 06:54
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Cifrar un archivo añadiendo clave envuelta en un único archivo

Buenas,

Si solo quieres saber "como acceder a un archivo binario en bloques i a con un offset de n bytes..."...

Porque nos cuentas todo lo anterior??

Para acceder al fichero con un offset concreto puedes usar el metodo read de la clase FileInputStream/DataInputStream:
http://docs.oracle.com/javase/7/docs...html#read(byte[],%20int,%20int)


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #4 (permalink)  
Antiguo 25/03/2015, 07:21
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Cifrar un archivo añadiendo clave envuelta en un único archivo

Ok, entiendo que con el metodo que se le aplica el [URL="http://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html#read%28byte%5B%5D,%20int,%20i nt%29"]offset[/URL] puedo hacerlo.

Cita:
Iniciado por Xerelo Ver Mensaje
No sé si habrá métodos pensados para hacer lo que buscas, pero ¿por qué no pruebas a recuperar todo el fichero como bytes y lo partes en dos arrays con los que trabajar?
Una pregunta si estoy trabajando con un archivo muy grande, la segunda byte array sera muy grande. Eso no cargara mucho en memoria¿

Claro la cosa seria usar el metodo arriba indicado pero ir leyendo solo de 1024 en 1024, y asi no sobrecargar.

Me equivoco?

Gracias por las resupestas!
  #5 (permalink)  
Antiguo 25/03/2015, 08:47
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Cifrar un archivo añadiendo clave envuelta en un único archivo

Ya lo tengo solucionado. En el post puesto en [URL="https://stackoverflow.com/questions/29239854/encrypt-a-file-appending-wrapped-key-in-unique-file"]StackOverflow[/URL] havia un pequeño error de codigo.

Al desencriptar usaba:

Código Java:
Ver original
  1. public static void fileUncryptWrapped(File in, File out, PrivateKey priv) {
  2.  
  3.    try {
  4.  
  5.        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
  6.        cipher.init(Cipher.UNWRAP_MODE, priv);
  7.  
  8.        //First we must to take the wrapped key in the first 256 bytes of the file:
  9.        byte[] bufferKey = new byte[256];
  10.        InputStream is = new FileInputStream(in);
  11.        if (is.read(bufferKey) != bufferKey.length) {
  12.  
  13.        }
  14.        is.close();
  15.  
  16.        Key ky = cipher.unwrap(bufferKey, "AES", Cipher.SECRET_KEY);¡
  17.  
  18.        // Now we must to uncrypt the rest of the file
  19.        cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
  20.        cipher.init(Cipher.DECRYPT_MODE, ky);
  21.  
  22.        CipherInputStream ix = new CipherInputStream(new FileInputStream(in), cipher);
  23.        FileOutputStream os = new FileOutputStream(out);
  24.  
  25.        copy(ix, os);
  26.  
  27.        ix.close();
  28.        os.close();
  29.  
  30.    } catch (Exception ex) {
  31.        System.err.println("Ha succeït un error xifrant: " + ex);
  32.    }
  33. }

Como podemos ver, cuando instancio el CipherInputStream no lo hago usando el FileInputStream instanciado para leer los primeros 256.
Modificando el codigo por:
Código Java:
Ver original
  1. CipherInputStream ix = new CipherInputStream(is, cipher);

soluciona mi problema..

Gracias por la ayuda!

Etiquetas: encriptacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:21.