Hi, I want to encrypt a file and decrypt it on another host.
For decryption on another host I guess I need to transfer the cipher... how can this be done? How can you write a Cipher to disk?
Or am I completely on a wron track?
The following code is doing it already on one host:
package test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.security.Provider;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
// Source: http://stackoverflow.com/questions/16390526/using-des-to-encrypt-and-decrypt-a-file-in-java
public class DesTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Create a new key to encrypt and decrypt the file
byte[] key = "password".getBytes();
// Get a cipher object in encrypt mode
Cipher cipher = null;
try {
DESKeySpec dks = new DESKeySpec(key);
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey desKey = skf.generateSecret(dks);
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, desKey);
} catch (Exception e) {
System.err.println("[CRITICAL] Incryption chiper error");
}
// Encrypt the file
try {
FileOutputStream fos = new FileOutputStream("test");
CipherOutputStream cos = new CipherOutputStream(fos, cipher);
ObjectOutputStream oos = new ObjectOutputStream(cos);
oos.writeObject("Secret line1...\nline2...");
oos.flush();
oos.close();
} catch (Exception e) {
System.err.println("[CRITICAL] Error encrypting data: " + e.getMessage());
e.printStackTrace();
}
// Get a cipher object in decrypt mode
try {
DESKeySpec dks = new DESKeySpec(key);
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey desKey = skf.generateSecret(dks);
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, desKey);
} catch (Exception ex) {
System.err.println("[CRITICAL] Incryption chiper error");
}
// Decrypt the file
try {
System.out.println((String) new ObjectInputStream(new CipherInputStream(new FileInputStream("test"), cipher)).readObject());
} catch (Exception e) {
System.err.println("[CRITICAL] Error decrypting data: " + e.getMessage());
e.printStackTrace();
}
}
}