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;
	}

	
}
 

你可能感兴趣的:(java加密)