Java - problema con algoritmo ranjdael

 
Vista:

problema con algoritmo ranjdael

Publicado por alejandro (3 intervenciones) el 28/04/2020 08:24:50
Me da error :


1
2
3
4
5
6
7
java.io.FileNotFoundException: criptografia\fichero (El sistema no puede encontrar la ruta especificada)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at java.io.FileInputStream.<init>(FileInputStream.java:93)
	at criptografia.cifrarFichero(criptografia.java:62)
	at criptografia.main(criptografia.java:148)






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
 
/**
* Clase que gestiona el cifrado y descifrado de un archivo utilizando
* el algoritmo Rijndael de 128 bits para la clave.
*/
public class criptografia{
private static FileInputStream fe = null; //fichero de entrada
private static FileOutputStream fs = null; //fichero de salida
/**
* Constructor por defecto
*/
public criptografia(){}
 
/**
* Método que convierte el fichero pasado por parámetro en un fichero cifrado
* mediante el algoritmo Rijndael con una clave de 128 bits.
* @param file
* @param clave
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws FileNotFoundException
* @throws IOException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
* @throws InvalidKeyException
*/
public static void cifrarFichero(String file, SecretKey clave) throws NoSuchAlgorithmException, NoSuchPaddingException, FileNotFoundException, IOException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException {
int bytesLeidos;
 
// Encrypt cipher
Cipher cifrador = Cipher.getInstance("Rijndael");
cifrador.init(Cipher.ENCRYPT_MODE, clave);
 
byte[] buffer = new byte[1000]; //array de bytes
byte[] bufferCifrado;
 
/*
* Obtenemos el fichero de entrada para realizar lectura y utilizamos
* el fichero file.cifrado para realizar el volcado de información cifrado.
*/
fe = new FileInputStream(file); //objeto fichero de entrada
fs = new FileOutputStream(file + ".cifrado"); //fichero de salida
 
bytesLeidos = fe.read(buffer, 0, 1000);
while (bytesLeidos != -1) {//mientras no se llegue al final del fichero
//Realizamos la escritura cifrado en el fichero de salida
bufferCifrado = cifrador.update(buffer, 0, bytesLeidos);
fs.write(bufferCifrado);
bytesLeidos = fe.read(buffer, 0, 1000);
}//while (bytesLeidos != -1)
bufferCifrado = cifrador.doFinal(); //Completa el cifrado
fs.write(bufferCifrado); //Graba el final del texto cifrado, si lo hay
 
//Cerrar los recursos utilizados
fe.close();
fs.close();
}//public static void cifrarFichero(String file, SecretKey clave) throws NoSuchAlgorithmException, NoSuchPaddingException, FileNotFoundException, IOException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException
 
/**
* Método que realizar el descrifado del fichero cifrado.
* @param file1
* @param clave
* @param file2
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws FileNotFoundException
* @throws IOException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
* @throws InvalidKeyException
*/
private static void descifrarFichero(String file1, SecretKey clave, String file2) throws NoSuchAlgorithmException, NoSuchPaddingException, FileNotFoundException, IOException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException {
int bytesLeidos;
 
//Creamos una instancia para realizar el descifrado
Cipher cifrador = Cipher.getInstance("Rijndael");
cifrador.init(Cipher.DECRYPT_MODE, clave);
 
 
//Fichero de entrada será el archivo cifrado y la salida será en texto plano
fe = new FileInputStream(file1);
fs = new FileOutputStream(file2);
byte[] bufferClaro;
byte[] buffer = new byte[1000]; //array de bytes
//lee el fichero de 1k en 1k y pasa los fragmentos leidos al cifrador
bytesLeidos = fe.read(buffer, 0, 1000);
while (bytesLeidos != -1) {//mientras no se llegue al final del fichero
//pasa texto cifrado al cifrador y lo descifra, asignándolo a bufferClaro
bufferClaro = cifrador.update(buffer, 0, bytesLeidos);
fs.write(bufferClaro); //Graba el texto claro en fichero
bytesLeidos = fe.read(buffer, 0, 1000);
}//while (bytesLeidos != -1)
bufferClaro = cifrador.doFinal(); //Completa el descifrado
fs.write(bufferClaro); //Graba el final del texto claro, si lo hay
 
//Cerramos los recursos utilizados
fe.close();
fs.close();
}//private static void descifrarFichero(String file1, SecretKey clave, String file2) throws NoSuchAlgorithmException, NoSuchPaddingException, FileNotFoundException, IOException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException
 
public static void main(String[] Args) {
//Recursos que utilizaremos
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
String usuario, password;
 
//Realizamos la lectura del usuario y password y realizamos la encriptación y desencriptación
try {
System.out.println("Introduce el usuario: ");
usuario=reader.readLine();
System.out.println("Introduce el password: ");
password=reader.readLine();
 
//Generamos la clave a partir del usuario y el password
KeyGenerator key_gen = KeyGenerator.getInstance("Rijndael");
SecureRandom secure  = new SecureRandom();
StringBuilder cadenaClave = new StringBuilder();
 
// La clave a generar se calcula en base al usuario y password introducido, con una longitud de 128 bits.
cadenaClave.append(usuario).append(password);
secure.setSeed(cadenaClave.toString().getBytes());
key_gen.init(128, secure);//Longitud de clave
 
// Generamos la clave.
SecretKey key = key_gen.generateKey();
 
//Cifrado de fichero en base a la clave creada
cifrarFichero("criptografia\\fichero", key);
 
//Descifrado del fichero en base a la clave creada
descifrarFichero("criptografia\\fichero.cifrado", key,
"criptografia\\fichero.descifrado");
} catch (Exception e) {
e.printStackTrace();
}//try-catch
}//public static void main(String[] Args)
}//public class Main
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

problema con algoritmo ranjdael

Publicado por Kabuto (1381 intervenciones) el 28/04/2020 18:56:33
Bueno, no es un error. Parece que lo que pasa es que no encuentra el fichero de entrada, el que se tiene que cifrar.
Revisa que la ruta que le indicas es la correcta.

Prueba a poner la barra normal -> / , en lugar de la invertida -> \ (que encima ha de ser doble para "escaparla").
Aunque estés bajo Windows que usa la invertida, el compilador de Java suele aceptar la barra normal, luego la máquina virtual de Java ya sabe qué hacer para moverse por los directorios de Windows.

Incluso prueba a mover ese fichero a la raíz del disco duro para que sea fácil escribir su ruta, y como parámetro de entrada le das la ruta completa, en lugar de probar suerte con rutas relativas, por ejemplo: "c:/fichero"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar