【问题标题】:R string for calculating signature用于计算签名的 R 字符串
【发布时间】:2019-10-18 20:41:40
【问题描述】:

下面的任务有没有更简单的解决方案?

为了使用 API,我需要使用下面的公式计算签名。 问题来自请求正文中的双引号,它们存储为\" 而不是"

下面的代码生成文本1570702210SoMeF@ke123456[{ "id": "123", "title": "foo", "version": "2019-10-10 10:10:10 } ]}SoMeF@ke123456,正确的哈希是"b6e783309e9d6f8ee47647373a9f6086020b3af8" by http://www.sha1-online.com/

签名公式: 十六进制(sha1({GMT_UNIXTIME} + {API_SECRET} + {CONTENT} + {API_SECRET})),其中

  • hex() - 将二进制数据转换为十六进制格式的函数
  • sha1() - 标准哈希函数 SHA-1,必须返回二进制数据
    • 文本字符串连接
  • {API_SECRET} - 与登录 {API_LOGIN} 一起发布的密钥
  • {CONTENT} - 请求正文

以下代码给出了错误的签名“c7a7ecbb0fd2d6eebfb378bdd061ea88d9fb2f69”。

 library(stringr)
 library(lubridate)
 library(digest)


API_SECRET <- 'SoMeF@ke123456'
mstime <- ymd_hms('2019-10-10 10:10:10')
my_id <- 123
title1 <- 'foo'

request_body_json <- paste0('[{ "id": "', my_id,'", "title": "', title1, '", "version": "', mstime, '  } ]}')

rbj1 <- paste0(round(as.numeric(mstime)), API_SECRET, request_body_json, API_SECRET)

signature <- digest(rbj1, algo = "sha1")

我看到了一种解决方法,使用cat() 函数将字符串保存到文件并从文件中计算签名,从而给出正确的签名“b6e783309e9d6f8ee47647373a9f6086020b3af8”

cat(paste0(round(as.numeric(mstime)), API_SECRET, request_body_json, API_SECRET), file = 'rbj.txt')

signature <- digest('rbj.txt', algo = "sha1", file = TRUE) 

【问题讨论】:

    标签: r string hash


    【解决方案1】:

    防止输入被序列化:

    digest(rbj1, algo = "sha1", serialize = FALSE)
    
    [1] "b6e783309e9d6f8ee47647373a9f6086020b3af8"
    

    【讨论】:

    • 非常感谢!我知道有聪明的办法。
    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2018-11-20
    • 1970-01-01
    • 2014-06-04
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多