PHP中有一个hash_hmac函数,hash_hmac(‘sha512’, $data, $key),可以用sha512算法给data通过key生成一个摘要,但Java中没有直接可用的方法。
/**
* 与php中的hash_hmac('sha512', $data, $key)功能相同
* @param data
* @param key
* @return
*/
private String hmacSHA512(String data,String key) {
String result = "";
byte[] bytesKey = key.getBytes();
final SecretKeySpec secretKey = new SecretKeySpec(bytesKey, "HmacSHA512");
try {
Mac mac = Mac.getInstance("HmacSHA512");
mac.init(secretKey);
final byte[] macData = mac.doFinal(data.getBytes());
byte[] hex = new Hex().encode(macData);
result = new String(hex, "ISO-8859-1");
} catch (NoSuchAlgorithmException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return result;
}
需要apache的commons-codec包.