簡體   English   中英

Google-App-Script vs PHP編碼為base64

[英]Google-App-Script vs php in encoding base64

此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==

我想在Google App腳本中復制它

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”,以防有人要復制。

我認為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()

示例腳本:

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==

抱歉,這對您沒有用。

更新:

通過2018年6月19日Google的更新Utilities.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==

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM