package org.sonny.pjt.util;
import java.security.SecureRandom;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class DESService {
private String algorithm = "DES";
private SecretKey secretKey = null;
private Cipher cipher = null;
private SecureRandom random = new SecureRandom();
public DESService(String key) {
init(key);
}
public byte[] deCrypt(String data) {
try{
cipher.init(Cipher.DECRYPT_MODE, secretKey, random);
return cipher.doFinal(Base32.decode(data));
}catch(Exception e) {
e.printStackTrace();
return null;
}
}
public String encrypt(byte[] data) {
try{
cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);
byte[] cipherByte = cipher.doFinal(data);
return Base32.encode(cipherByte);
}catch(Exception e) {
e.printStackTrace();
return null;
}
}
private void init(String key){
try{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
byte rawKeyData[] = key.getBytes();
DESKeySpec dks = new DESKeySpec(rawKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(algorithm);
secretKey = keyFactory.generateSecret(dks);
cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
}catch(Exception e) {
e.printStackTrace();
}
}
private String base16Encode(byte[] data) {
String s = "";
for(int i = 0; i < data.length; i++) {
String bs = Integer.toHexString(data[i]).toUpperCase();
if(bs.length() > 2) {
bs = bs.substring(bs.length() - 2);
} else if(bs.length() < 2) {
bs = "0" + bs;
}
s += bs;
}
return s;
}
private byte[] base16Decode(String data) {
byte[] r = new byte[data.length() / 2];
for(int i = 0; i < r.length; i++) {
String s = data.substring(i * 2, i * 2 + 2);
r[i] = Integer.valueOf(s, 16).byteValue();
}
return r;
}
}
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請
點擊舉報。