我对哈希和加密都很陌生。我想要做的是访问一个需要预先散列一些变量的API,现在我的哈希不知何故输出不正确。
哈希采用以下格式:
Hash是sha1hash SHA1(CallerID + Time + key + unique)40 - char十六进制,例如“6b76a4ede12897d42dabc2a5f9270bbdb76985af” 其中key是您指定的私钥。
我假设文本中的“+”符号假设连接。尽管如此,按照说明并使用摘要包,我的哈希值有问题,尽管所有变量的长度都符合指令。通过使用:http://www.hashkiller.co.uk/sha1-decrypter.aspx验证散列错误,它为我的散列生成错误,HTTP GET查询也生成403错误,散列错误文本。
我的代码
library(httr)
library(digest)
library(stringi)
BooliReq <- function() {
#ID Info
key <- "PRIVATEKEY"
caller.ID <- "IDName"
#//
unix.timestamp <- as.integer( as.POSIXct(Sys.time()) )
random.string <- stri_rand_strings( n = 1, length = 16)
#Sha1-Hash: CallerID + time + key + unique, 40-char hexadecimal
hash.string <- paste0(caller.ID, unix.timestamp, key, random.string)
hash.sha1 <- digest(hash.string, "sha1")
#Create URL
url.string <- paste0("https://api.booli.se/listings?q=nacka&limit=3&offset=0&callerId=", caller.ID, "&time=" ,
unix.timestamp, "&unique=", random.string, "&hash=", hash.sha1)
GET(url.string, add_headers( Accept = "json"))
}
API链接:
答案 0 :(得分:1)
您需要设置serialize=FALSE
,否则输入字符串将首先被序列化然后计算哈希值(因此您将无法获得字符串的哈希值...例如使用此在线sha1检查结果生成器:link)
digest(hash.string, "sha1", serialize=FALSE)