현재 R Studio에서 인증 문자열을 얻기 위한 작은 코드 조각이 있습니다. App Script에서 동일한 기능을 복제하려고 하는데 동일한 결과를 얻지 못했습니다.
R Studio의 코드는 다음과 같습니다.
library(digest)
library(openssl)
sec_key <- "secret-key"
checksum_string <- "checksum-string"
checksum <- base64_encode(hmac(sec_key, checksum_string, algo = "sha1", raw = T))
Result after hash: 32 e1 f7 da c6 5b 16 fe 02 5b 90 f9 98 65 2b 2c 2e 22 c9 ad
Result after base64 encode: "MuH32sZbFv4CW5D5mGUrLC4iya0="
한편, AppScript에서 사용하는 코드는 다음과 같습니다.
function get_checksum{
var sec_key = "secret-key"
var checksum_string = "checksum-string"
var hash = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_1, sec_key, checksum_string)
var checksum = Utilities.base64Encode(hash)
}
Result after hash: [107.0, -81.0, -127.0, -126.0, -93.0, 108.0, 110.0, -26.0, -29.0, 70.0, -90.0, -44.0, -100.0, -107.0, 25.0, 54.0, 86.0, 22.0, -82.0, -97.0]
Result after base64 encoding: "a6+BgqNsbubjRqbUnJUZNlYWrp8="
보시다시피 동일한 결과가 나오지 않습니다.
"원시" 결과를 얻을 수 있도록 해시에 사용해야 하는 함수가 있는 것 같은데, 그것을 모르고 찾지 못했습니다.
누구든지 올바른 방향으로 나를 가리킬 수 있다면 감사하겠습니다.
답변1
에 따르면문서, AppScript의 HMAC 함수는 매개변수를 반대 방향으로 사용합니다. 즉, 키보다 먼저 메시지를 사용합니다.
$ python3
>>> import hmac, base64
>>> HMAC = lambda key, msg: base64.b64encode(hmac.HMAC(key, msg, 'sha1').digest())
>>> HMAC(key=b'secret-key', msg=b'checksum-string')
b'MuH32sZbFv4CW5D5mGUrLC4iya0='
>>> HMAC(key=b'checksum-string', msg=b'secret-key')
b'a6+BgqNsbubjRqbUnJUZNlYWrp8='