HmacSHA1 js和java加密的结果不一致

解释

HmacSHA1,我的前端js加密后和后端java加密后加密串不一致,也不知道啥原因。经过一系列尝试,最后前端用crypto里的加密才和后端的保持一致,个人理解是CryptoJS里的hmac加密默认【二进制转文本】使用的是hex方式,然后crypto提供了base64的方式,用完后发现和后端加密的串是一致的

jsHmacSHA1加密

https://blog.csdn.net/qq_35459724/article/details/109391887
具体digest可以选那些,点进去方法看源码是这几个
在这里插入图片描述

import crypto from 'crypto'
let Base64 = require('js-base64').Base64 // 引入
const secretKey = 'nQwZz9W14snhN3Q5QjhzcJzXjna8B3kzLyNpIyOl7SEFSD5D0ugCug6JwarEqELY'
export default {
  hmacEnc: function(message,key) {
    // const CryptoJS = require('crypto-js');
    // let message = '你的行为和表现还是让我无法完全相信你放下了'
    // let key = '小太阳小月亮'
    const encrypt = crypto.createHmac('sha1', key).update(message).digest('base64');
    console.log(encrypt);
    return encrypt;
  },hmacEncNoKey: function(message) {

    // const CryptoJS = require('crypto-js');
    // let message = '你的行为和表现还是让我无法完全相信你放下了'
    // let key = '小太阳小月亮'
    const encrypt = crypto.createHmac('sha1', secretKey).update(message).digest('base64');
    console.log(encrypt);
    return encrypt;
  },
}



java代码

和普通的javahamc加密代码是一样的


import java.security.InvalidKeyException;
        import java.security.NoSuchAlgorithmException;

        import javax.crypto.Mac;
        import javax.crypto.spec.SecretKeySpec;

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

/**
 * HMAC_SHA1 Sign生成器.
 *
 * 需要apache.commons.codec包
 *
 */
public class testHamc {

    private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";

    /**
     * 使用 HMAC-SHA1 签名方法对data进行签名
     *
     * @param data
     *            被签名的字符串
     * @param key
     *            密钥
     * @return
    加密后的字符串
     */
    public static String genHMAC(String data, String key) {
        byte[] result = null;
        try {
            //根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
            SecretKeySpec signinKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);
            //生成一个指定 Mac 算法 的 Mac 对象
            Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
            //用给定密钥初始化 Mac 对象
            mac.init(signinKey);
            //完成 Mac 操作
            byte[] rawHmac = mac.doFinal(data.getBytes());
            result = Base64.encodeBase64(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;
        }
    }
    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        String genHMAC = genHMAC("你的行为和表现还是让我无法完全相信你放下了", "小太阳小月亮");
        System.out.println(genHMAC.length()); //28
        System.out.println(genHMAC);  // O5fviq3DGCB5NrHcl/JP6+xxF6s=
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值