将python中的md5哈希生成器转换为R
我正在尝试使用Cryptopia的私有API。为了使用私有API,需要post参数的Base64编码MD5哈希。我从中找到了一个python代码 在将代码翻译成R时,md5哈希生成器给我带来了麻烦。python和R的哈希结果是不同的。请告诉我如何修理 Python:将python中的md5哈希生成器转换为R,python,r,api,hash,md5,Python,R,Api,Hash,Md5,我正在尝试使用Cryptopia的私有API。为了使用私有API,需要post参数的Base64编码MD5哈希。我从中找到了一个python代码 在将代码翻译成R时,md5哈希生成器给我带来了麻烦。python和R的哈希结果是不同的。请告诉我如何修理 Python: post_parameters = {'Currency': 'BTC'} post_data = json.dumps(post_parameters) md5 = hashlib.md5() jsonparams = post_
post_parameters = {'Currency': 'BTC'}
post_data = json.dumps(post_parameters)
md5 = hashlib.md5()
jsonparams = post_data.encode('utf-8')
md5.update(jsonparams)
rcb64 = base64.b64encode(md5.digest()).decode('utf-8')
R:
post_参数好吧,一个问题是toJSON
和json.dumps
对json文件中冒号后是否应该有空格有不同的看法。我明白了
# pyhton
jsonparams
# '{"Currency": "BTC"}
# R
cat(jsonparams)
# {"Currency":"BTC"}
因此,由于字符串不同,因此它们的MD5散列不会完全相同。但是,除非API有非常严格的空白规则,否则这应该不是什么大问题
另一件事是,如果您只想匹配字符串的哈希值,那么应该在R中使用serialize=FALSE
和digest()
函数
rcb64 <- digest::digest(jsonparams, algo="md5", serialize = FALSE, raw=TRUE)
及
由于您的字符串中似乎只有ASCII值,因此您需要UTF-8编码这一事实实际上不会对结果产生任何影响。对于Rbase64encode
函数,您使用的是什么软件包?
rcb64 <- digest::digest(jsonparams, algo="md5", serialize = FALSE, raw=TRUE)
# R
RCurl::base64Encode(digest::digest("hello", algo="md5", serialize = FALSE, raw=TRUE))
# [1] "XUFAKrxLKna5cZ2REBfFkg=="
# python
md5 = hashlib.md5()
md5.update("hello")
base64.b64encode(md5.digest())
# 'XUFAKrxLKna5cZ2REBfFkg=='