Como cifrar y descifrar con 3DES

Iniciado por nolasco281, 1 Febrero 2016, 14:31 PM

0 Miembros y 1 Visitante están viendo este tema.

nolasco281

Hola a todos.

Mi consulta es la siquiente estoy tratando de cifrar un archivo con 3DES(TripleDes) he encontrado ejemplos de como se hace esto con cadenas de texto y funcionan, pero me entro la duda que pasa si es un archivo el que deseo cifrar, no he encontrado ejemplos en la web a ecepcion de este:

Ya lo probe y parece hacer la encritacion bien pero al momento de desencritar me devuelve 0 talvez puedan ayudarme, u orientarme. Saludos.

Esta es la parte de cifrar.
Código (java) [Seleccionar]

public class Encryptor {
   private static String inputFilePath = "D:/1.txt";
   public static void main(String[] args) {
       FileOutputStream fos = null;
       File file = new File(inputFilePath);
       String keyString = "140405PX_0.$88";
       String algorithm = "DESede";
       try {
           FileInputStream fileInputStream = new FileInputStream(file);
           byte[] fileByteArray = new byte[fileInputStream.available()];
           fileInputStream.read(fileByteArray);
           for (byte b : fileByteArray) {
           System.out.println(b);
           }
           SecretKey secretKey = getKey(keyString);
           Cipher cipher = Cipher.getInstance(algorithm);
           cipher.init(Cipher.ENCRYPT_MODE, secretKey);
           ObjectOutputStream objectOutputStream = new ObjectOutputStream
                   (new CipherOutputStream
                           (new FileOutputStream
                                   ("D:/Secret.file"), cipher));
           objectOutputStream.writeObject(fileByteArray);
           objectOutputStream.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
   public static SecretKey getKey(String message) throws Exception {
       String messageToUpperCase = message.toUpperCase();
       byte[] digestOfPassword = messageToUpperCase.getBytes();
       byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
       SecretKey key = new SecretKeySpec(keyBytes, "DESede");
       return key;
   }
}


Esta es descifrar
Código (java) [Seleccionar]

public class Decryptor {
   public static void main(String[] args) {
       try {
           File inputFileNAme = new File("d:/Secret.file");
           FileInputStream fileInputStream = new FileInputStream(inputFileNAme);
           FileOutputStream fileOutputStream = new FileOutputStream(outputFilePath);
           SecretKey secretKey = getKey(keyString);
           Cipher cipher = Cipher.getInstance(algorithm);
           cipher.init(Cipher.DECRYPT_MODE, secretKey);
           ObjectInputStream objectInputStream = new ObjectInputStream
                   (new CipherInputStream(fileInputStream, cipher));
           System.out.println(objectInputStream.available());
           while (objectInputStream.available() != 0) {
               fileOutputStream.write((Integer) objectInputStream.readObject());
               System.out.println(objectInputStream.readObject());
           }
           fileOutputStream.flush();
           fileOutputStream.close();
           fileInputStream.close();
           objectInputStream.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
   public static SecretKey getKey(String message) throws Exception {
       String messageToUpperCase = message.toUpperCase();
       byte[] digestOfPassword = messageToUpperCase.getBytes();
       byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
       SecretKey key = new SecretKeySpec(keyBytes, "DESede");
       return key;
   }
}
Lo que se puede imaginar... se puede programar.