Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在GoogleApps脚本中执行节点JS代码_Javascript_Node.js_Google Apps Script_Encryption_Cryptojs - Fatal编程技术网

Javascript 在GoogleApps脚本中执行节点JS代码

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

我想在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)

有人能帮我在谷歌应用程序脚本中运行吗?我相信你的目标如下

  • 您想将问题中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脚本
      参考资料:

      阅读……答案中的解决方案无疑是这里的最佳选择。但CryptoJS也可以用于谷歌应用程序脚本,因为它是一个纯JavaScript库。当然,您不允许使用NodeJS语句,这是在Base64编码时发布的代码所做的。但这一点都不必要,因为CryptoJS板载方式也可以实现同样的效果:
      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)