· 8 years ago · Nov 18, 2017, 02:50 AM
1import java.io.*;
2import javax.crypto.*;
3import javax.crypto.spec.DESKeySpec;
4import java.security.*;
5import java.util.*;
6public class cifrar_descifrar
7{
8 public static void main(String [] args)
9 {
10
11 String comando1 = "-c";
12 String comando2 = "-d";
13
14 //COMANDO 1 o COMANDO 2
15 if ((comando1.equals(args[0]))||(comando2.equals(args[0]))){
16 //leer clave por teclado
17 try{
18 InputStreamReader leer_clave = new InputStreamReader(System.in);
19 BufferedReader buff_clave = new BufferedReader(leer_clave);
20 System.out.print("Escriba una clave: ");
21 String clave = buff_clave.readLine();
22
23 //pasar clave a la clase SecretKey
24 try{
25 SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
26 DESKeySpec kspec = new DESKeySpec(clave.getBytes());
27 SecretKey ks = skf.generateSecret(kspec);
28
29 //Inicializar el cifrado
30 try{
31 Cipher cifrado = Cipher.getInstance("DES");
32
33 //Escojo modo cifrado o descifrado segun sea el caso
34
35 if (comando1.equals(args[0])){
36 cifrado.init(Cipher.ENCRYPT_MODE, ks);}//MODO CIFRAR
37 if (comando2.equals(args[0])){
38 cifrado.init(Cipher.DECRYPT_MODE, ks);}//MODO DESCIFRAR
39
40
41 //Leer fichero
42
43 InputStream archivo = new FileInputStream( args[1] );
44 OutputStream fich_out = new FileOutputStream ( args[2] );
45
46 byte[] buffer = new byte[1024];
47 byte[] bloque_cifrado;
48 String textoCifrado = new String();
49 int fin_archivo = -1;
50 int leidos;//numero de bytes leidos
51
52 leidos = archivo.read(buffer);
53
54 while( leidos != fin_archivo ) {
55 bloque_cifrado = cifrado.update(buffer,0,leidos);
56 textoCifrado = textoCifrado + new String(bloque_cifrado,"ISO-8859-1");
57 leidos = archivo.read(buffer);
58 }
59
60 archivo.close();
61
62 bloque_cifrado = cifrado.doFinal();
63 textoCifrado = textoCifrado + new String(bloque_cifrado,"ISO-8859-1");
64 //ISO-8859-1 es ISO-Latin-1
65
66 fich_out.write(textoCifrado.getBytes("ISO-8859-1"));//escribir fichero
67
68 }
69 //Inicializacion de cifrado
70 catch(javax.crypto.NoSuchPaddingException nspe) {} //Instanciacion DES
71 catch(javax.crypto.IllegalBlockSizeException ibse) {}//metodo doFinal
72 catch(javax.crypto.BadPaddingException bpe) {}//metodo doFinal
73 }
74 //pasar clave a la clase SecretKey
75 catch(java.security.InvalidKeyException ike) {}
76 catch(java.security.spec.InvalidKeySpecException ikse) {}
77 catch(java.security.NoSuchAlgorithmException nsae) {}
78 }
79 //leer del teclado la clave como String
80 catch(java.io.IOException ioex) {}
81 }
82 }
83}