Google-App-Script vs php编码base64

时间:2018-03-13 08:58:48

标签: php google-apps-script base64 encode hmac

此php代码在使用SHA 512

进行散列之前对密钥进行解码
$API_SECRET_KEY="W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg=";
$BDAPI_SECRET_KEY=base64_decode($API_SECRET_KEY);
$HMAC_SIGN = base64_encode(hash_hmac('sha512',$MESSAGE,$BDAPI_SECRET_KEY,true));
echo $HMAC_SIGN;

BfVNi21gY09c8M18cWBRBgo1W9pAlXM99ZVoF7Kz2ETFnIuvXjj8NRvRgn/GaT/m6YJ8efsr5s9EDbIhznAaag==

我想在谷歌应用脚​​本中复制这个

var Secret = "W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg="  
var BDSecret= Utilities.base64Decode(Secret)
var hmac = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, message, BDSecret ));
    Logger.log(hmac)

ew5KhLWSJixn8zw4s6VkpYIwvGBjrmjY3LhNWZr9CVEw6W22LOGg+lVzA3uQgOVyICSCffw2bzTepnBdoYtldw==

如果我在散列之前没有解码API,它们会返回相同的结果。但是出于这个特殊目的,需要解码密钥。消息变量只是我的名字" Parit"万一有人想要复制。

1 个答案:

答案 0 :(得分:2)

我认为Utilities.computeHmacSignature()可能无法使用[] byte作为值。那么作为一种解决方法,如何使用jsSHA?我认为在您的情况下,您可以使用https://github.com/Caligatio/jsSHA/blob/master/src/sha512.js

使用jsSHA的流程如下:

流程:

  1. 下载sha512.js。
  2. 在脚本编辑器上,创建新脚本,例如sha512.js的文件名。
    • 将sha512.js的脚本复制并粘贴到创建的脚本中。
  3. 将示例脚本复制并粘贴到脚本编辑器的Code.gs
  4. 运行示例脚本的myFunction()
  5. 示例脚本:

    function myFunction() {
      var message = "Parit";
      var secret = "W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg=";
      var obj = new jsSHA("SHA-512", "TEXT");
      obj.setHMACKey(secret, "B64");
      obj.update(message);
      Logger.log(obj.getHMAC("B64"))
    }
    

    注意:

    • 当我为Parit测试message时,我得到BfVNi21gY09c8M18cWBRBgo1W9pAlXM99ZVoF7Kz2ETFnIuvXjj8NRvRgn/GaT/m6YJ8efsr5s9EDbIhznAaag==

    这对你没用,我很抱歉。

    更新:

    By the Google's update at June 19, 2018Utilities.computeHmacSignature()必须能够使用字节数组。这样,只使用原生Google Apps Scvript,可以在不使用jsSHA的情况下检索结果。所以我想更新我的答案。

    修改后的脚本:

    function myFunction() {
      var message = "Parit";
      var secret = "W0+m0Dc9GMN9yDVeq3GMDsJ49WasEhQHkNHNuDw3wNg=";
    
      var value = Utilities.base64Decode(Utilities.base64Encode(message));
      var key = Utilities.base64Decode(secret);
      var out = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, value, key);
      var res = Utilities.base64Encode(out)
      Logger.log(res)
    }
    

    结果:

    BfVNi21gY09c8M18cWBRBgo1W9pAlXM99ZVoF7Kz2ETFnIuvXjj8NRvRgn/GaT/m6YJ8efsr5s9EDbIhznAaag==