Hmac 加密工具类

package com.cross.bridge.prerecord.util;

import org.apache.commons.codec.binary.Base64;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @Describe: Hmac加密工具类
 * @Author: Bridge
 * @Date: 2018/5/15
 * @Version: 1.00
 */
public class HmacUtils {


    /**
     * 加密生成签名
     * @param data 签名的格式
     * @param key  秘钥
     * @return
     */
    public static byte[] hmacSHA512(byte[] data, String key) {
        try {
            SecretKey secretKey = new SecretKeySpec(key.getBytes("UTF-8"),
                    "HmacSHA512");
            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
            mac.init(secretKey);
            return mac.doFinal(data);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * base64编码的变体,由于base64中的=、/和+不适合Url传递,
     * 因此需要将这三个符号替换掉,规则是去掉=,+替换为-,/替换为_
     * @param stringBytes  hmac(hmacSHA512)
     * @return
     */
    public static String base64Url(byte[] stringBytes) {
        try {

            String base64Str = Base64.encodeBase64String(stringBytes);
            base64Str = base64Str.replace("=", "");
            base64Str = base64Str.replace("+", "-");
            base64Str = base64Str.replace("/", "_");

            return base64Str;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

    /**
     * SHA512 加密
     * @param strText (用户密码明文 + salt)
     * @return
     */
    public static byte[] sha512(final String strText) {
        // 是否是有效字符串
        if (strText != null && strText.length() > 0) {
            try {
                // SHA 加密开始
                // 创建加密对象 并指定加密类型
                MessageDigest messageDigest = MessageDigest
                        .getInstance("SHA-512");
                // 传入要加密的字符串
                messageDigest.update(strText.getBytes("UTF-8"));
                // 得到 byte 数组
                return messageDigest.digest();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * Base64加密
     * @param stringbytes
     * @return
     */
    public static String base64(byte[] stringbytes) {
        try {
            String base64Str = Base64.encodeBase64String(stringbytes);
            return base64Str;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }
}

转载于:https://my.oschina.net/u/3854850/blog/1818869

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值