public class ShaUtil {

	private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5','6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

	/***
	 * 利用Apache的工具類實現SHA-256加密
	 * @param str 加密后的報文
	 * @return
	 */
	public static String encodeSHA256(String str){
		MessageDigest messageDigest;
		String rtn = "";
		try {
			messageDigest = MessageDigest.getInstance("SHA-256");
			byte[] hash = messageDigest.digest(str.getBytes("UTF-8"));
			rtn = Hex.encodeHexString(hash);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return rtn;
	}


	/**
	 * SHA1 加密方法
	 * @param str 待加密的内容
	 * @return 加密後内容
	 */
	public static String encodeSHA1(String str){
		String rtn = "";
		if (str == null || "".equals(str)){
			return rtn;
		}
		try{
			MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
			messageDigest.update(str.getBytes());
			rtn = getFormattedText(messageDigest.digest());
			return rtn.toUpperCase();
		}catch (Exception e){
			e.printStackTrace();
			return rtn;
		}
	}
	private static String getFormattedText(byte[] bytes) {
		int len = bytes.length;
		StringBuilder buf = new StringBuilder(len * 2);
		// 把密文轉換成十六進制的字符串形式
		for (int j = 0; j < len; j++) {
			buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
			buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
		}
		return buf.toString();
	}
}
