6

Google Appsスクリプトを使用しており、&にAWS CloudWatchへのHTTPリクエストを書き込むよう試みています。Googleスクリプトのバイナリ出力HMAC encription

Amazon APIドキュメントhereでは、署名鍵の作成方法に関して疑似を使用して、HMACアルゴリズムがバイナリ形式を返すことを説明しています。

HMAC(key, data) represents an HMAC-SHA256 function 
that returns output in binary format. 

Googleは、スクリプトは、このようなハッシュを行うための方法を提供しています

Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, 
              data, 
              key); 

をアプリが、戻り値の型は、常にバイト配列です。

Byte[] 

Byte []をAWSが望むバイナリデータに変換するにはどうすればよいですか?または、ハッシュを計算するためにGoogle Apps Scriptで使用できるバニラのjavascript関数はありますか?

バイト配列から必要なバイナリデータへの変換が簡単であるべきおかげ

+1

あなたは最初に(Byte []から)文字列に変換して、バイナリに変換するのが簡単だろうか? – Rpranata

+0

はい、私は、バイト[]をブロブに変換して、ハッシュの次の反復に渡す文字列としてデータを読み取ってみましたが、利用できません – user2495753

答えて

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); 

しかし、あなたはthis open issue in the bugtrackerに見ている - 変換にいくつかの問題があるかもしれません。

多分あなたは、に、String.fromCharCode()ループを作り、負numersを避けるように試みることができる:

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); 
+0

返信いただきありがとうございます。これは間違いなくイライラしています。私はbugtrackerにコメントをしたので、うまくいけば、これは少なくともGoogleのチームが対応し、この既知の問題をアップデートすることになるでしょう。 – user2495753

+0

'String.fromCharCode'オプションを試しましたか?この問題は、負のByte値で表示されるようです。これらに256を追加することで問題を解決するはずです。 – Taras

+0

私はこれを行い、256を加えることで負の値を取り除こうとしましたが、残念ながら私はまだ間違った結果を得ています。 Googleはこれが既知の問題であり、それに取り組んでいると述べていますが、現時点ではこのバグの更新はないと述べています。 – user2495753

2

私はそれがUtilities.computeHmacSignatureがASCIIとして鍵を取るバグではかなり確信しています。 http://caligatio.github.com/jsSHA/

:しかし、バイトは[] GAS

で正しくASCIIにし、ライブラリの作家があまりにもちょうど[]

は、だから私はこの代わりに使うバイトとして鍵を取る機能を提供し、あまりにも愚かで解析する方法はありませんでした

SHA.jsとSHA-256.jsをコピーすると、正常に動作します。

PS。それは全体の2日間私の時間を無駄にするので、私は非常に迷惑である