将 HMAC 签名从 Go 转换为 R

问题描述 投票:0回答:1

我正在尝试在 R 中重现以下 golang 代码,以创建 consibio/mbtilesever 的签名。目的是用 R 和 python 构建应用程序,这些应用程序可以通过安全连接访问 mbtileserver。虽然我能够使用 python 生成工作版本,但使用 R 的工作版本却很棘手。预先感谢。

上面链接中的示例 GO 代码:


serviceId := "test"
date := "2019-03-08T19:31:12.213831+00:00"
salt := "0EvkK316T-sBLA"
secretKey := "YMIVXikJWAiiR3q-JMz1v2Mfmx3gTXJVNqme5kyaqrY"

key := sha1.New()
key.Write([]byte(salt + secretKey))

hash := hmac.New(sha1.New, key.Sum(nil))
message := fmt.Sprintf("%s:%s", date, serviceId)
hash.Write([]byte(message))

b64hash := base64.RawURLEncoding.EncodeToString(hash.Sum(nil))
fmt.Println(b64hash) // Should output: 2y8vHb9xK6RSxN8EXMeAEUiYtZk

Python 代码(有效):

import hashlib
import hmac
import base64

service_id = "test"
date = "2019-03-08T19:31:12.213831+00:00"
salt = "0EvkK316T-sBLA"
secret_key = "YMIVXikJWAiiR3q-JMz1v2Mfmx3gTXJVNqme5kyaqrY"

key = hashlib.sha1()
key.update((salt + secret_key).encode())

hash_obj = hmac.new(key.digest(), (date + ":" + service_id).encode(), hashlib.sha1)

b64_hash = base64.urlsafe_b64encode(hash_obj.digest()).decode()
print(b64_hash)  # Should output: 2y8vHb9xK6RSxN8EXMeAEUiYtZk

到目前为止的 R 代码(不起作用):

library(openssl)
library(digest)

service_id <- "test"
date <- "2019-03-08T19:31:12.213831+00:00"
salt <- "0EvkK316T-sBLA"
secret_key <- "YMIVXikJWAiiR3q-JMz1v2Mfmx3gTXJVNqme5kyaqrY"

key <- sha1(paste0(salt, secret_key))
hash_obj <- hmac(key, paste0(date, ":", service_id), "sha1")
b64_hash <- base64_encode(hash_obj)
print(b64_hash)  # Should output: 2y8vHb9xK6RSxN8EXMeAEUiYtZk

python r go hmacsha1 mbtiles
1个回答
0
投票

这个怎么样?

library(digest)
library(base64enc)

service_id <- "test"
date       <- "2019-03-08T19:31:12.213831+00:00"
salt       <- "0EvkK316T-sBLA"
secret_key <- "YMIVXikJWAiiR3q-JMz1v2Mfmx3gTXJVNqme5kyaqrY"

key_digest  <- digest::digest(
  paste0(salt, secret_key), 
  algo = "sha1", 
  serialize = FALSE,
  raw = TRUE
)

hmac_binary <- digest::hmac(
  key_digest, 
  paste0(date, ":", service_id), 
  "sha1", 
  raw = TRUE
)

base64enc::base64encode(hmac_binary) # Should output: 2y8vHb9xK6RSxN8EXMeAEUiYtZk
#> [1] "2y8vHb9xK6RSxN8EXMeAEUiYtZk="

创建于 2024-04-16,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.