2017-09-07 5 views
1

Je dois me connecter à une API en utilisant hash_hmac. Dans la documentation PHP pour hash_hmac, le quatrième paramètre bool $ raw_output contrôle si la sortie est une donnée binaire brute (true) ou un hexit en minuscule (false). Mon programme fonctionne en PHP en plaçant simplement ce paramètre à true.Script de Google Apps équivalent à hash_hmac() de PHP avec une sortie RAW BINARY?

C'est ce qui fonctionne en PHP: (ou puis-je)

$signature = base64_encode(hash_hmac('SHA256', $signature_string, $private_key, true)) 

Dans Google Apps, je ne peux pas utiliser des bibliothèques javascript mais il y a cette fonction: Utilities.computeHmacSha256Signature https://developers.google.com/apps-script/reference/utilities/utilities#computehmacsha256signaturevalue-key

Cependant cela n'a pas l'option "vrai" que PHP a, donc il ne produit pas les données binaires brutes.

Comment puis-je obtenir la même valeur en utilisant Google Apps que je reçois en PHP?

C'est ce que j'ai dans Google Apps, mais il est évident qu'il ne délivre pas les données binaires brutes:

var signature = Utilities.computeHmacSha256Signature(signature_string, private_key); 

Je ne trouve un moyen de convertir la réponse en hexadécimal (PHP équivalent de FAUX au lieu de TRUE, mais cela ne me rend plus près de la solution

// convert to hex 
var signature_in_hex = signature.reduce(function(str,chr) { 
chr = (chr < 0 ? chr + 256 : chr).toString(16); 
return str + (chr.length==1?'0':'') + chr; 
},''); 
+0

affichant Peut-être une sortie par exemple à la fois PHP et GAppScript nous aiderait à comprendre la question? – Sammitch

+0

Je ne fais que deviner ici, mais est-ce que nourrir le tableau d'octets généré par 'Utilities.computeHmacSha256Signature()' dans 'Utilities.newBlob()' fait ce dont vous avez besoin? –

+0

Bien que, en regardant https://stackoverflow.com/questions/17160896/binary-output-from-google-script-hmac-encription?rq=1 suggère que ce n'est pas la solution ... –

Répondre