在Google Apps脚本中执行节点JS代码 示例脚本:结果:注意:参考文献:

问题描述

我想在Google应用脚本中运行以下NodeJS代码

const CryptoJS = require("crypto-js");
let timeStamp_nonce = Date.Now().toString();
let bodystring = `{"ID":"001"}`
const body = JSON.parse(bodystring)
const secret = "secret"
const msg= {
    timeStamp_nonce: timeStamp_nonce,body: JSON.stringify(body)
  };
const payload = new Buffer(JSON.stringify(msg)).toString('base64');
const signature = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA512(payload,secret));
console.log("Payload:",payload)
console.log("\nSignature:",signature)

我尝试转换:

let timeStamp_nonce = Date.Now().toString();
let bodystring = `{"ID":"001"}`
const body = JSON.parse(bodystring)
const secret = "secret"
const msg = {
    timeStamp_nonce: timeStamp_nonce,body: JSON.stringify(body)
};
const payload = Utilities.base64Encode(JSON.stringify(msg));
//
// confused on this part...
//
//const signature = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA512(payload,secret));
//
//
Logger.log("Payload:",i)
Logger.log("\nSignature:",signature)

任何人都可以帮忙在Google Apps脚本中运行

解决方法

我相信您的目标如下。

  • 您要将问题中的Node.js脚本转换为Google Apps脚本。

我认为可以使用Google Apps脚本的内置功能来实现此转换。请检查以下示例脚本。

示例脚本:

let timeStamp_nonce = Date.now().toString();
let bodystring = `{"ID":"001"}`
const body = JSON.parse(bodystring)
const secret = "secret"
const msg= {
  timeStamp_nonce: timeStamp_nonce,body: JSON.stringify(body)
};
const payload = Utilities.base64Encode(JSON.stringify(msg));
const bytes = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512,payload,secret);
const signature = bytes.map(b => ('0' + (b & 0xFF).toString(16)).slice(-2)).join('');
console.log("Payload:",payload)
console.log("\nSignature:",signature)

结果:

timeStamp_nonce"1234567890123"时,您的Node.js脚本返回以下值。

Payload: eyJ0aW1lU3RhbXBfbm9uY2UiOiIxMjM0NTY3ODkwMTIzIiwiYm9keSI6IntcIklEXCI6XCIwMDFcIn0ifQ==

Signature: bd291d4c05e1a217afd90e2036fad2f3273ed4e4eada909fe5878cf2e902849ec5b01b160e20d8f43b0564be83e4a74391ccd280d43771a12a1363e5458ad61d

我可以确认有关此结果的信息,当将timeStamp_nonce = "1234567890123"用于上述Google Apps脚本时,可以获得相同的结果。

注意:

  • 在Google Apps脚本中,由Utilities.computeHmacSignature加密的值是带符号的十六进制的字节数组。在这种情况下,为了实现转换,需要将bytes数组转换为无符号十六进制。
  • 请在启用V8的情况下使用上述Google Apps脚本。

参考文献: