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"));
    }
}