/*
* Copyright 2003-2010 Tufts University Licensed under the
* Educational Community License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may
* obtain a copy of the License at
*
* http://www.osedu.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS"
* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
/**
*
* @author akumar03
*/
package edu.tufts.vue.util;
import javax.crypto.Cipher;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.InvalidKeyException;
import org.apache.commons.codec.binary.Hex;
import tufts.vue.*;
import java.io.*;
public class Encryption {
private static String algorithm = "DESede";
private static final String KEY_FILE = "vue.key";
private static Key key = null;
private static Cipher cipher = null;
private static Hex hex = new Hex();
public static String encrypt(String input) {
try {
if(cipher == null) cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, getKey());
byte[] inputBytes = input.getBytes();
byte[] outputBytes = cipher.doFinal(inputBytes);
String output = new String(hex.encode(outputBytes));
return output;
}catch(Exception ex) {
ex.printStackTrace();
return input ;
}
}
public static String decrypt(String encrypted) {
try {
if(cipher == null) cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, getKey());
byte[] encryptedBytes = hex.decode(encrypted.getBytes());
byte[] recoveredBytes = cipher.doFinal(encryptedBytes);
String recovered = new String(recoveredBytes);
return recovered;
} catch (Exception ex) {
ex.printStackTrace();
return encrypted;
}
}
private static synchronized Key getKey() {
try {
if(key == null) {
File keyFile = new File(VueUtil.getDefaultUserFolder().getAbsolutePath()+File.separator+KEY_FILE);
if(keyFile.exists()){
ObjectInputStream is = new ObjectInputStream(new FileInputStream(keyFile));
key = (Key)is.readObject();
is.close();
} else {
key = KeyGenerator.getInstance(algorithm).generateKey();
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(keyFile));
os.writeObject(key);
os.close();
}
return key;
} else {
return key;
}
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
}