摘要:
Java语言下基于HmacSHA1算法的不可逆加密实现,非常简单,传入数据和密钥(即data和key),返回加密后的字符串。另外,密钥(key)不能为空串,先放代码,后续补详细注释。
package com.ljc.utils;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class PasswordEncryption {
/**
* 【将密文转换为字符串】
* @param b
* @return 返回全大写的密文字符串
*/
public static String byte2hex(byte[] b) {
StringBuilder hs = new StringBuilder();
String stmp;
for (int n = 0; b != null && n < b.length; n++) {
stmp = Integer.toHexString(b[n] & 0XFF);
if (stmp.length() == 1)
hs.append('0');
hs.append(stmp);
}
return hs.toString().toUpperCase();
}
/**
* 【HmacSHA1加密算法实现】
* @param data
* @param key
* @return 返回加密后的密文字符串
*/
public static String hamcsha1(byte[] data, byte[] key) {
try {
SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
return byte2hex(mac.doFinal(data));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return null;
}
/**
* 【调用加密算法】
* @param data
* @param key
* @return 返回加密后结果
*/
public String HmacSHA1Encode(String data, String key) {
byte[] dataBytes = data.getBytes();
byte[] keyBytes = key.getBytes();
String result = hamcsha1(dataBytes, keyBytes);
return result;
}
// 简要测试
public static void main(String[] args) {
String result = new PasswordEncryption().HmacSHA1Encode("1", "1");
System.out.println(result);
}
}