PHP2JAVA:PHP.hash_hmac方法的JAVA实现

文章介绍了如何在JAVA中使用HMAC-SHA1算法来实现与PHP中的hash_hmac函数相同的功能,提供了详细的代码示例,包括签名方法genHMAC和将字节转换为十六进制字符串的辅助方法byte2hex。
摘要由CSDN通过智能技术生成

在很多的API调用的时候,会用到一些加密签名。比如:php中的 hash_hmac(data, key),那如何用JAVA实现这个方法呢?

PHP代码:

/*
 * $data, 待签名内容字符串
 * $key, 签名密钥
 * $sign, 签名结果
 */
$sign = hash_hmac("sha1", $data, $key);

JAVA的实现方式:

   /**
     * 使用HMAC-SHA1签名方法对data进行签名
     */
    public String genHMAC(String data, String key){
        String result=null;
        try{
            String algorithm = "HmacSHA1";

            //根据给定的字节数组构造一个密钥,并指定算法名称
            SecretKeySpec signinKey = new SecretKeySpec(key.getBytes(), algorithm);

            //生成一个指定Mac算法的Mac对象
            Mac mac = Mac.getInstance(algorithm);

            //永给定的密钥初始化mac
            mac.init(signinKey);

            //完成Mac操作
            byte[] rawHmac = mac.doFinal(data.getBytes());
            //结果处理成String类型
            result = this.byte2hex(rawHmac);
        }catch (NoSuchAlgorithmException e){
            //System.err.println(e.getMessage());
        }catch (InvalidKeyException e){
            //System.err.println(e.getMessage());
        }

        if(null != result){
            return new String(result);
        }else{
            return null;
        }
    }

    private String byte2hex(final byte[] b){
        String hs = "";
        String stmp = "";

        for(int n=0;n<b.length;n++){
            stmp = (java.lang.Integer.toHexString(b[n] & 0xFF));
            if(stmp.length() == 1){
                hs = hs + "0" + stmp;
            }else{
                hs = hs + stmp;
            }
        }

        return hs;
    }

调用 genHMAC方法就能得到和PHP中hash_hmac方法一样的结果了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值