在 Google 应用程序脚本中执行节点 JS 代码

Execute node JS code in Google apps script

我想 运行 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 脚本的 built-in 函数来实现这种转换。请检查以下示例脚本。

示例脚本:

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.jsreturns如下值。

Payload: eyJ0aW1lU3RhbXBfbm9uY2UiOiIxMjM0NTY3ODkwMTIzIiwiYm9keSI6IntcIklEXCI6XCIwMDFcIn0ifQ==

Signature: bd291d4c05e1a217afd90e2036fad2f3273ed4e4eada909fe5878cf2e902849ec5b01b160e20d8f43b0564be83e4a74391ccd280d43771a12a1363e5458ad61d

我可以确认关于这个结果,当timeStamp_nonce = "1234567890123"用于上述Google Apps Script时,可以获得相同的结果。

注:

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

参考文献: