2015-07-19 62 views
1

我都是新来的哈希和加密。我想要做的是访问一个需要预先散列一些变量的API,现在我的散列不能正确输出。sha1hash不工作,散列错误。

散列是要在以下格式:

散列是sha1hash SHA1(来电显示+时间+键+独特),为40 - 炭十六进制,例如“6b76a4ede12897d42dabc2a5f9270bbdb76985af” ,其中关键是您分配的私钥。

我假定文本中的“+”符号假定连接在一起。尽管如此,按照说明和使用摘要软件包,我的散列有些问题,尽管所有变量的长度都与指令相匹配。哈希错误通过使用: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:

https://translate.google.se/translate?sl=sv&tl=en&js=y&prev=_t&hl=sv&ie=UTF-8&u=https%3A%2F%2Fwww.booli.se%2Fapi%2F%23pagination&edit-text=&act=url

+1

使用'消化(hash.string,“SHA-1”,连载= FALSE)',但我希望你有一个真正caller.ID,因为我怀疑它会工作,否则... – digEmAll

+0

解决它!谢谢! – uncool

+0

请创建答案,我会将其标记为正确。 – uncool

回答

1

您需要设置serialize=FALSE,否则输入的字符串将是第一序列化,然后将哈希计算(所以你不会得到字符串的哈希...检查结果,例如使用这个在线sha1生成器:link

digest(hash.string, "sha1", serialize=FALSE)