这就是我在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 ] text:79678265454958727984804583726549455458817848560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
它们产生不同的结果,在 node.js 中产生不同的结果。
注意:在 java 中,加密是 HmacSHA1,文本是数组形式,而不是字符串形式,您也可以在代码中看到。