Java加密共同函数
Java加密共通函数
import java.io.File; import java.io.IOException; import java.net.URL; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.Security; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; public class DesUtils { static { Security.addProvider(new com.sun.crypto.provider.SunJCE()); } static boolean debug = true; private static String Algorithm = "AES"; private static String secutiyKey = "1234567812345678"; private static String fileName1="DESPW1.class"; private static String fileName2="DESPW2.class"; public static String getKey() throws Exception { String ret = ""; URL url=DesUtils.class.getResource(""); // 1.read the key from 1st file ret =new String(hex2byte(FileUtils.readFileToString(new File(url.getPath()+"/"+fileName1)))); // 2.read the key from 2nd file // 3.combine the keys ret = ret + new String(hex2byte(FileUtils.readFileToString(new File(url.getPath()+"/"+fileName2)))); // 4.change them to the byte array return ret; } public static void writeKeyToFile(){ String key=StringUtils.strip(secutiyKey); int lenght=key.length(); String prefix=""; String afterFix=""; if(lenght>0){ prefix=StringUtils.substring(key, 0, lenght/2); afterFix=StringUtils.substring(key, lenght/2+1, lenght); URL url=DesUtils.class.getResource(""); try { FileUtils.writeStringToFile(new File(url.getPath()+"/"+fileName1), byte2hex(prefix.getBytes())); FileUtils.writeStringToFile(new File(url.getPath()+"/"+fileName2), byte2hex(afterFix.getBytes())); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static byte[] encodeConfig(byte[] set, byte[] key) { byte[] ret = null; // byte[] key = "tnts".getBytes(); try { SecretKeySpec sk = new SecretKeySpec(key, Algorithm); Cipher c1; c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE, sk); ret = c1.doFinal(set); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return ret; } public static byte[] decodeConfig(byte[] set, byte[] key) { byte[] ret = null; try { // byte[] key = getKey(); SecretKeySpec sk = new SecretKeySpec(key, Algorithm); Cipher c1; c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE, sk); ret = c1.doFinal(set); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return ret; } // byte数组转换为16进制字符串 public static String byte2hex(byte[] data) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < data.length; i++) { String temp = Integer.toHexString(((int) data[i]) & 0xFF); for (int t = temp.length(); t < 2; t++) { sb.append("0"); } sb.append(temp); } return sb.toString(); } // 16进制转换为byte数组 public static byte[] hex2byte(String hexStr) { byte[] bts = new byte[hexStr.length() / 2]; for (int i = 0, j = 0; j < bts.length; j++) { bts[j] = (byte) Integer.parseInt(hexStr.substring(i, i + 2), 16); i += 2; } return bts; } }