在node.js中生成与java相同的hmacSha1签名?

时间:2013-06-26 18:34:36

标签: java node.js cryptography

这就是我在java中生成hmacsha1签名的方法

private static byte[] hmac_sha1(String crypto, byte[] keyBytes, byte[] text) {
Mac hmac = null;

    try {
        hmac = Mac.getInstance(crypto);
        SecretKeySpec macKey =
            new SecretKeySpec(keyBytes, "RAW");
        hmac.init(macKey);
        System.out.println("hmac: "+Arrays.toString(keyBytes));
        return hmac.doFinal(text);
} catch (Exception e) {
    // NOTE. Deviation from reference code.
    // Reference code prints a stack trace here, which is not what we
    // want in a production environment, so instead we rethrow.
    throw new UndeclaredThrowableException(e);
    }

}

我需要帮助才能在node.js中生成相同的内容。有人可以帮我这个吗?正如人们提到我需要展示我在这里尝试过的是我在node.js中编写的代码来创建相同的功能

Ocra.hmacSha1 = function(crypto, keyBytes, text) {
    var digest, hmac;
    hmac = nodeCrypto.createHmac(crypto, new Buffer(keyBytes, 'utf8'));
    console.log(this.bin2String(keyBytes));
    digest = hmac.update(new Buffer(text, 'utf8')).digest('hex');        
    return this.hexStr2Bytes(digest);    // here i am converting string into bytes array    
};

上述代码未产生预期效果。如果我将这些参数传递给java代码 加密:sha1 keyBytes:[49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,48] 文本:79678265454958727984804583726549455458817848560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

它们产生不同的结果,在node.js中它会产生不同的结果。

注意:在java中,crypto是HmacSHA1,文本是数组形式而不是字符串,你也可以在代码中看到。

1 个答案:

答案 0 :(得分:0)

你在JavaScript版本中以keyBytes传递的内容是什么? new Buffer(keyBytes, 'utf8')几乎肯定不是你想要的。如果您传递十六进制编码的字符串,则需要对其进行十六进制解码:new Buffer(keyBytes, 'hex')。如果您要传递数组,则必须执行new Buffer(keyBytes)