加解密方法:
public class DESPlus {
private static String strDefaultKey = "default";
private Cipher encryptCipher;
private Cipher decryptCipher;
public static String byteArr2HexStr(byte[] arrB) throws Exception {
int iLen = arrB.length;
StringBuffer sb = new StringBuffer(iLen * 2);
for(int i = 0; i < iLen; ++i) {
int intTmp;
for(intTmp = arrB[i]; intTmp < 0; intTmp += 256) {
}
if (intTmp < 16) {
sb.append("0");
}
sb.append(Integer.toString(intTmp, 16));
}
return sb.toString();
}
public static byte[] hexStr2ByteArr(String strIn) throws Exception {
byte[] arrB = strIn.getBytes();
int iLen = arrB.length;
byte[] arrOut = new byte[iLen / 2];
for(int i = 0; i < iLen; i += 2) {
String strTmp = new String(arrB, i, 2);
arrOut[i / 2] = (byte)Integer.parseInt(strTmp, 16);
}
return arrOut;
}
public DESPlus() throws Exception {
this(strDefaultKey);
}
public DESPlus(String strKey) throws Exception {
this.encryptCipher = null;
this.decryptCipher = null;
Security.addProvider(new SunJCE());
Key key = this.getKey(strKey.getBytes());
this.encryptCipher = Cipher.getInstance("DES/ECB/NoPadding");
this.encryptCipher.init(1, key);
this.decryptCipher = Cipher.getInstance("DES/ECB/NoPadding");
this.decryptCipher.init(2, key);
}
public byte[] encrypt(byte[] arrB) throws Exception {
return this.encryptCipher.doFinal(arrB);
}
public String encrypt(String strIn) throws Exception {
while (strIn.getBytes().length % 8 != 0) {
System.out.println("加密需要是8的倍数:+1空格");
strIn += " ";
}
return byteArr2HexStr(this.encrypt(strIn.getBytes()));
}
public byte[] decrypt(byte[] arrB) throws Exception {
return this.decryptCipher.doFinal(arrB);
}
public String decrypt(String strIn) throws Exception {
return new String(this.decrypt(hexStr2ByteArr(strIn)));
}
private Key getKey(byte[] arrBTmp) throws Exception {
byte[] arrB = new byte[8];
for(int i = 0; i < arrBTmp.length && i < arrB.length; ++i) {
arrB[i] = arrBTmp[i];
}
Key key = new SecretKeySpec(arrB, "DES");
return key;
}
}