By the Google’s update at June 19, 2018, finally, Utilities.computeDigest()
, Utilities.computeHmacSha256Signature()
and Utilities.computeHmacSignature()
got to be able to use the byte arrays. By this, using only native Google Apps Script, the result can be retrieved without using jsSHA. When I used the updated them, the response speed is much faster than that of jsSHA. It is considered that this may be optimized for Google Apps Script. As a sample, it shows 2 samples as follows. The both results are the same.
Sample script 1: Using jsSHA
var obj = new jsSHA("SHA-512", "TEXT");
obj.setHMACKey(key, "B64");
obj.update(value);
var res = obj.getHMAC("B64");
Sample script 2: Updated Utilities.computeHmacSignature()
var out = Utilities.computeHmacSignature(
Utilities.MacAlgorithm.HMAC_SHA_512,
Utilities.base64Decode(Utilities.base64Encode(value)),
Utilities.base64Decode(key)
);
var res = Utilities.base64Encode(out);
Sample situation 1
c2FtcGxlS2V5
which converted “sampleKey” to base64 and sampleValue
are used as the key and the value, respectively. Both sample scripts are as follows.
Sample script 1: Using jsSHA
var key = "c2FtcGxlS2V5";
var value = "sampleValue";
var obj = new jsSHA("SHA-512", "TEXT");
obj.setHMACKey(key, "B64");
obj.update(value);
var res = obj.getHMAC("B64");
Sample script 2: Updated Utilities.computeHmacSignature()
var key = "c2FtcGxlS2V5";
var value = "sampleValue";
var out = Utilities.computeHmacSignature(
Utilities.MacAlgorithm.HMAC_SHA_512,
Utilities.base64Decode(Utilities.base64Encode(value)),
Utilities.base64Decode(key)
);
var res = Utilities.base64Encode(out);
The both results are BjnBG35lcpjmR6/001XiG/Cfassr8aGYheH31P3X0sJE8GyZ1hiNLl86QRDqpXxi640EW4Eedbn9LCh0OcvJHA==
.
Sample situation 2
Also you can use the binary file as the key. The sample script is as follows.
var fileId = "###"; // binary file
var image = DriveApp.getFileById(fileId).getBlob().getBytes();
var key = Utilities.base64Encode(image);
var value = "sampleValue";
var out = Utilities.computeHmacSignature(
Utilities.MacAlgorithm.HMAC_SHA_512,
Utilities.base64Decode(Utilities.base64Encode(value)),
Utilities.base64Decode(key)
);
var res = Utilities.base64Encode(out);
Sample situation 3
Stackoverflow: Google-App-Script vs php in encoding base64