在 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。
参考文献:
我想 运行 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。