Hash值生成java算法
java加密算法hash值生成,了解到的三种方式
1.MD:信息摘要算法
java代码Utils:
public static String MD5Encode(String origin){
try{
MessageDigest md = MessageDigest.getInstance("MD5");
// return Hex.encodeHexString(md.digest(origin.getBytes(DE_CHARSET)));
return Base64.encodeBase64String(md.digest(origin.getBytes(DE_CHARSET)));
}catch(NoSuchAlgorithmException ex){
ex.printStackTrace();
}
return null;
}
2.SHA:安全散列算法
java代码Utils:
import java.math.BigInteger;
import java.security.MessageDigest;
public class SHAUtils {
private static final String KEY_SHA = "SHA";
public static String encodeSHA(String content){
byte[] inputData = content.getBytes();
try {
MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA);
messageDigest.update(inputData);
BigInteger sha = new BigInteger(messageDigest.digest());
return sha.toString(32);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
3.HMAC:散列消息鉴别码
java代码Utils
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class HMACUtils {
/**
* 默认的算法
*/
private static final String DE_KEY_MAC = "HmacMD5";
/**
* 默认的字符集
*/
private static final Charset DE_CHARSET = StandardCharsets.UTF_8;
/**
* 使用默认的算法(HmacMD5) 得到hmac 16进制字符串
* @param inputStr 需要加密的串
* @param key key
* @return 16进制字符串
* @throws Exception
*/
public static String encryptHMAC(String inputStr, String key){
try{
return encryptHMAC(inputStr, key, DE_KEY_MAC);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 使用指定的算法得到hmac 16进制字符串
* @param inputStr 需要加密的串
* @param key key
* @param keyMac hmac算法
* @return 16进制字符串
* @throws Exception
*/
public static String encryptHMAC(String inputStr, String key, String keyMac) throws Exception {
// return Hex.encodeHexString(encryptHMAC(inputStr.getBytes(DE_CHARSET), key, keyMac));
return Base64.encodeBase64String(encryptHMAC(inputStr.getBytes(DE_CHARSET), key, keyMac));
}
public static String MD5Encode(String origin){
try{
MessageDigest md = MessageDigest.getInstance("MD5");
// return Hex.encodeHexString(md.digest(origin.getBytes(DE_CHARSET)));
return Base64.encodeBase64String(md.digest(origin.getBytes(DE_CHARSET)));
}catch(NoSuchAlgorithmException ex){
ex.printStackTrace();
}
return null;
}
private static byte[] encryptHMAC(byte[] data, String key, String keyMac) throws Exception {
SecretKey secretKey = new SecretKeySpec(key.getBytes(DE_CHARSET), keyMac);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return mac.doFinal(data);
}
public static void main(String[] args) throws Exception{
System.out.println("HMACStr:\n" + encryptHMAC("a", "hank"));
}
}