来自Google Script HMAC encription的二进制输出

use*_*753 6 hmac amazon-web-services google-apps-script amazon-cloudwatch

我目前正在使用Google Apps脚本,并且正在尝试编写和签署AWS CloudWatch的HTTP请求.

此处的Amazon API文档中关于如何创建签名密钥,他们使用伪来解释HMAC算法是否返回二进制格式.

HMAC(key, data) represents an HMAC-SHA256 function 
that returns output in binary format.
Run Code Online (Sandbox Code Playgroud)

Google应用脚本提供了一种执行此类哈希的方法,

Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256,
                                            data,
                                            key);
Run Code Online (Sandbox Code Playgroud)

但返回类型始终是一个字节数组.

Byte[]
Run Code Online (Sandbox Code Playgroud)

如何将Byte []转换为AWS想要的二进制数据?或者是否有一个我可以在Google Apps脚本中使用的vanilla javascript函数来计算哈希?

谢谢

Tar*_*ras 1

从字节数组到所需的二进制数据的转换应该很简单:

kDate = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256,
             '20130618', 'AWS4' + kSecret);
kDate = Utilities.newBlob(kDate).getDataAsString();
kRegion = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, 
             'eu-west-1', kDate);
Run Code Online (Sandbox Code Playgroud)

但是您必须在错误跟踪器中查看这个未解决的问题- 转换中可能存在一些问题。

也许你可以尝试创建一个 String.fromCharCode() 循环并避免负数:

kDateB = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256,
             '20130618', 'AWS4' + kSecret);
kDate = '';
for (var i=0; i<kDateB.length; i++)
  kDate += String.fromCharCode(kDateB[i]<0?256+kDateB[i]:0+kDateB[i]);
kRegion = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, 
             'eu-west-1', kDate);
Run Code Online (Sandbox Code Playgroud)