Javascript 在GoogleApps脚本中执行节点JS代码
我想在Google应用程序脚本中运行以下NodeJS代码Javascript 在GoogleApps脚本中执行节点JS代码,javascript,node.js,google-apps-script,encryption,cryptojs,Javascript,Node.js,Google Apps Script,Encryption,Cryptojs,我想在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
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)
有人能帮我在谷歌应用程序脚本中运行吗?我相信你的目标如下
- 您想将问题中Node.js的脚本转换为Google Apps脚本
timeStamp\u nonce
为“1234567890123”
时,Node.js脚本返回以下值
Payload: eyJ0aW1lU3RhbXBfbm9uY2UiOiIxMjM0NTY3ODkwMTIzIiwiYm9keSI6IntcIklEXCI6XCIwMDFcIn0ifQ==
Signature: bd291d4c05e1a217afd90e2036fad2f3273ed4e4eada909fe5878cf2e902849ec5b01b160e20d8f43b0564be83e4a74391ccd280d43771a12a1363e5458ad61d
我可以确认,关于这个结果,当将timeStamp_nonce=“1234567890123”
用于上述谷歌应用程序脚本时,也可以得到相同的结果
注:
- 在Google Apps脚本中,由
加密的值是有符号十六进制的字节数组。在这种情况下,为了实现转换,需要将字节数组转换为无符号十六进制实用程序.computeHmacSignature
- 请在启用V8时使用上面的Google Apps脚本
- 您想将问题中Node.js的脚本转换为Google Apps脚本
- 我相信你的目标如下
timeStamp\u nonce
为“1234567890123”
时,Node.js脚本返回以下值
Payload: eyJ0aW1lU3RhbXBfbm9uY2UiOiIxMjM0NTY3ODkwMTIzIiwiYm9keSI6IntcIklEXCI6XCIwMDFcIn0ifQ==
Signature: bd291d4c05e1a217afd90e2036fad2f3273ed4e4eada909fe5878cf2e902849ec5b01b160e20d8f43b0564be83e4a74391ccd280d43771a12a1363e5458ad61d
我可以确认,关于这个结果,当将timeStamp_nonce=“1234567890123”
用于上述谷歌应用程序脚本时,也可以得到相同的结果
注:
- 在Google Apps脚本中,由
加密的值是有符号十六进制的字节数组。在这种情况下,为了实现转换,需要将字节数组转换为无符号十六进制实用程序.computeHmacSignature
- 请在启用V8时使用上面的Google Apps脚本
const payload=CryptoJS.enc.Utf8.parse(JSON.stringify(msg)).toString(CryptoJS.enc.Base64)代码>阅读…答案中的解决方案无疑是这里的最佳选择。但CryptoJS也可以用于谷歌应用程序脚本,因为它是一个纯JavaScript库。当然,您不允许使用NodeJS语句,这是在Base64编码时发布的代码所做的。但这一点都不必要,因为CryptoJS板载方式也可以实现同样的效果:const payload=CryptoJS.enc.Utf8.parse(JSON.stringify(msg)).toString(CryptoJS.enc.Base64)代码>。