我试图创建将在一些网站上运行私有API调用的函数。base64解码 - 字符串中的nul
base64_encode(hash_hmac('sha512', $post_data, base64_decode($secret), true))
使用包摘要和RCurl我可以很容易地为写:
base64Encode(hmac(key = base64Decode(secret), object = post_data, algo = 'sha512', raw = TRUE))
我打整天与 所有这些网站在PHP如下使用认证通过API调用的签名在HMAC 键参数输入:
key = base64Decode(secret)
的问题是,HMAC函数只接受字符串值,但base64Decode可能返回的东西不仅仅是字符串更多:
str(base64Decode(secret))
chr "îă?ľÂÜĄ\vŽĺ\022""| __truncated__
这__truncated__是这里的关键问题。所以,我一直在尝试,接下来的事情就是采取从解码功能和rawToChar原始输出就可以了:
str(base64Decode(secret,mode='raw'))
raw [1:64] ee e3 3f be ...
rawToChar(base64Decode(secret,mode='raw'))
错误rawToChar(base64Decode(秘密,模式=“原始”)):嵌入 NUL字符串:?! “IAľÂÜĄ\ VZL \ 022 \ 0^\026Č<¶©wŚ0Î\ 035E \ 026 \ r \001ňKÍ“RR \ 003j“7¤Ň\nťä_\004米@ß\ 0A“C:\0271˝ ZnĚ55'v”
正如我们现在可以看到,有一个神秘的NUL东西的地方在我的(甚至没有)的字符串。我不那么在意NUL s,我只需要传递这些数据作为hmac的输入。
- 有没有可能用nul处理字符串,只是为了将它作为输入上位函数推得更远?
- 是否有可能有HMAC功能键参数接受原始对象也是这样吗?
我也试过base64enc包没有成功。我尝试了许多不同的转换,但是一切都恢复了这个简单的'字符串'。
这些网站是相当新的,这个认证过程看起来像其中一个标准的API身份验证。应该有某种方式来处理R.
这个过程如果有人想测试,
secret <- '7uM/vsLcpQuOmOUSACFeFsiLtql3jKEwzh3rFg0B8kvNhFL4A2qEN6TSCp3kXwRtQN8AwyJjFzG9Wm7MNTWSdg=='
我得到了同样的问题。由于某些原因,base64Decode在输出到字符时截断结果... – bumpkin 2015-02-03 02:28:22
@bumpkin使用'raw'而不是'character'。 – jangorecki 2015-02-04 20:30:28
这就是我最终做的。谢谢! – bumpkin 2015-02-04 21:00:31