Java的數據加密算法,HmacSHA1,MD5等。java自帶了加密的方法類SecretKey。
Java 8 中 HashMap 的性能提升 http://www.linuxidc.com/Linux/2014-04/100868.htm
Java 8 的 Nashorn 引擎 http://www.linuxidc.com/Linux/2014-03/98880.htm
Java 8簡明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm
private static final String MAC_NAME="HmacSHA1";
private static final String ENCODING="UTF-8";
/**
*使用HMAC-SHA1簽名方法對對encryptText進行簽名
*@paramencryptText被簽名的字符串
*@paramencryptKey密鑰
*@return返回被加密後的字符串
*@throwsException
*/
public static String HmacSHA1Encrypt(String encryptText, String encryptKey)throws Exception{
byte[] data = encryptKey.getBytes( ENCODING );
// 根據給定的字節數組構造一個密鑰,第二參數指定一個密鑰算法的名稱
SecretKey secretKey = new SecretKeySpec( data, MAC_NAME );
// 生成一個指定 Mac 算法 的 Mac 對象
Mac mac = Mac.getInstance( MAC_NAME );
// 用給定密鑰初始化 Mac 對象
mac.init( secretKey );
byte[] text = encryptText.getBytes( ENCODING );
// 完成 Mac 操作
byte[] digest = mac.doFinal( text );
StringBuilder sBuilder = bytesToHexString( digest );
return sBuilder.toString();
}
/**
* 使用 HMAC-SHA1 簽名方法對對e
* @param encryptData 被簽名的字
* @param encryptKey 密鑰
* @return 返回被加密後的字符串
*/
public static String hmacSHA1Encrypt( byte[] encryptData, String encryptKey ) throws Exception{
byte[] data = encryptKey.getBytes( ENCODING );
// 根據給定的字節數組構造一個密鑰,第二參數指定一個密鑰算法的名稱
SecretKey secretKey = new SecretKeySpec( data, MAC_NAME );
// 生成一個指定 Mac 算法 的 Mac 對象
Mac mac = Mac.getInstance( MAC_NAME );
// 用給定密鑰初始化 Mac 對象
mac.init( secretKey );
// 完成 Mac 操作
byte[] digest = mac.doFinal( encryptData );
StringBuilder sBuilder = bytesToHexString( digest );
return sBuilder.toString();
}
/**
* 轉換成Hex
* @param bytesArray
*/
public static StringBuilder bytesToHexString( byte[] bytesArray ){
if ( bytesArray == null ){
return null;
}
StringBuilder sBuilder = new StringBuilder();
for ( byte b : bytesArray ){
String hv = String.format("%02x", b);
sBuilder.append( hv );
}
return sBuilder;
}
public static String md5(String str) {
StringBuilder sb = new StringBuilder();
try {
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(str.getBytes("UTF8"));
byte bytes[] = m.digest();
for (int i = 0; i < bytes.length; i++) {
if ((bytes[i] & 0xff) < 0x10) {
sb.append("0");
}
sb.append(Long.toString(bytes[i] & 0xff, 16));
}
} catch (Exception e) {
}
return sb.toString();
}
public static String createSign(Map<String,String> params,String appkey) throws Exception {
String queryString = getString(params);
return HmacSHA1Encrypt(queryString,appkey);
}
//
private static String getString(Map<String, String> params) {
List<String> sList = new ArrayList<String>();
for(Entry<String,String> entry:params.entrySet()){
sList.add(entry.getKey()+"="+entry.getValue());
}
String queryString = Joiner.on("&").join(sList);
return queryString;
}
/**
* HmacMD5算法
* @param msg 加密信息
* @param keyString 秘鑰
* @return digest 結果
*/
public static String hmacMD5(String msg, String keyString) {
String digest = null;
try {
SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), "HmacMD5");
Mac mac = Mac.getInstance("HmacMD5");
mac.init(key);
byte[] bytes = mac.doFinal(msg.getBytes("UTF-8"));
StringBuffer hash = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
hash.append('0');
}
hash.append(hex);
}
digest = hash.toString();
} catch (UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException e) {
}
return digest;
}