Java实现HmacSHA1加密

Java实现HmacSHA1加密2019独角兽企业重金招聘Python工程师标准>>>…

大家好,欢迎来到IT知识分享网。

最近项目中,和第三方公司有个接口调用,第三方公司给的接口地址要验签,其中用到了HmacSHA1加密

记录一下,以备不时之需

public class HMAC {
    /**
     * 定义加密方式
     * MAC算法可选以下多种算法
     * <pre>
     * HmacMD5
     * HmacSHA1
     * HmacSHA256
     * HmacSHA384
     * HmacSHA512
     * </pre>
     */
    private static final String KEY_MAC = "HmacMD5";

    private static final String KEY_MAC_SHA1 = "HmacSHA1";

    private static final String CHARSET_UTF8 = "UTF-8";

    /*
        使用 HmacSha1 加密
     */
    public static String hmacSha1Encrypt(String encryptText, String encryptKey) throws Exception {
        byte[] text = encryptText.getBytes(CHARSET_UTF8);
        byte[] keyData = encryptKey.getBytes(CHARSET_UTF8);

        SecretKeySpec secretKey = new SecretKeySpec(keyData, KEY_MAC_SHA1);
        Mac mac = Mac.getInstance(secretKey.getAlgorithm());
        mac.init(secretKey);
        return byte2hex(mac.doFinal(text));
    }

    //二行制转字符串
    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();
    }

}

可以加一个参数,针对不同的加密方式,只需要改变传入的参数值即可。

下面是从网上找到一个byte[]数组转换String的方法

        try{

            String by = HMAC.hmacSha1Encrypt("caoke","advancement");
            System.out.println("by ============"+by);//88951F2AA794A7153675230F008EBD0D5720FFC2
        }catch (Exception e){
            e.printStackTrace();
        }

可以和网上在线加密工具进行对比 http://encode.chahuo.com/ 来验证是否加密正确。

转载于:https://my.oschina.net/u/2272597/blog/868679

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15919.html

(0)
上一篇 2024-02-12 22:26
下一篇 2024-02-13 09:26

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信