Created
June 5, 2015 17:09
-
-
Save mahedi2014/0d016b260481bb50e44b to your computer and use it in GitHub Desktop.
File encryption and decryption using DES in java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package test; | |
import java.io.FileInputStream; | |
import java.io.FileOutputStream; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.io.OutputStream; | |
import java.util.Scanner; | |
import javax.crypto.Cipher; | |
import javax.crypto.CipherInputStream; | |
import javax.crypto.CipherOutputStream; | |
import javax.crypto.SecretKey; | |
import javax.crypto.SecretKeyFactory; | |
import javax.crypto.spec.DESKeySpec; | |
public class CipherData { | |
public static void main(String[] args) { | |
try { | |
//////Encrypt source file (source.xml to encrypted_source.xml )///// | |
Scanner sc = new Scanner(System.in); | |
System.out.println("Enter encrypt key: "); | |
String enKey = sc.next(); // needs to be at least 8 characters for DES | |
FileInputStream fis = new FileInputStream("source.xml"); | |
FileOutputStream fos = new FileOutputStream("encrypted_source.xml"); | |
encrypt(enKey, fis, fos); | |
//////Decrypt source file (encrypted_source.xml to decrypted_source.xml )///// | |
System.out.println("Enter encrypt key: "); | |
String deKey = sc.next(); // needs to be at least 8 characters for DES | |
FileInputStream fis2 = new FileInputStream("encrypted_source.xml"); | |
FileOutputStream fos2 = new FileOutputStream("decrypted_source.xml"); | |
decrypt(deKey, fis2, fos2); | |
} catch (Throwable e) { | |
} | |
} | |
public static void encrypt(String key, InputStream is, OutputStream os) throws Throwable { | |
encryptOrDecrypt(key, Cipher.ENCRYPT_MODE, is, os); | |
} | |
public static void decrypt(String key, InputStream is, OutputStream os) throws Throwable { | |
encryptOrDecrypt(key, Cipher.DECRYPT_MODE, is, os); | |
} | |
public static void encryptOrDecrypt(String key, int mode, InputStream is, OutputStream os) throws Throwable { | |
DESKeySpec dks = new DESKeySpec(key.getBytes()); | |
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES"); | |
SecretKey desKey = skf.generateSecret(dks); | |
Cipher cipher = Cipher.getInstance("DES"); // DES/ECB/PKCS5Padding for SunJCE | |
if (mode == Cipher.ENCRYPT_MODE) { | |
cipher.init(Cipher.ENCRYPT_MODE, desKey); | |
CipherInputStream cis = new CipherInputStream(is, cipher); | |
doCopy(cis, os); | |
} else if (mode == Cipher.DECRYPT_MODE) { | |
cipher.init(Cipher.DECRYPT_MODE, desKey); | |
CipherOutputStream cos = new CipherOutputStream(os, cipher); | |
doCopy(is, cos); | |
} | |
} | |
public static void doCopy(InputStream is, OutputStream os) throws IOException { | |
byte[] bytes = new byte[64]; | |
int numBytes; | |
while ((numBytes = is.read(bytes)) != -1) { | |
os.write(bytes, 0, numBytes); | |
} | |
os.flush(); | |
os.close(); | |
is.close(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment