string - Base64 解码 - 字符串中的 nul

标签 string r base64 digest rcurl

我正在尝试创建将在某些网站上运行私有(private) API 调用的函数。 所有这些站点都通过 API 调用签名进行身份验证,如下 php 所示:

base64_encode( hash_hmac('sha512', $post_data, base64_decode($secret), true) )

使用包摘要和 RCurl 我可以轻松地写为:

base64Encode( hmac(key = base64Decode(secret), object = post_data, algo = 'sha512', raw = TRUE) )

我和 hmac key 参数输入战斗了一整天:

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'))

Error in rawToChar(base64Decode(secret,mode='raw')) : embedded nul in string: 'îă?ľÂÜĄ\vŽĺ\022\0!^\026Č‹¶©wŚˇ0Î\035ë\026\r\001ňKÍ„Rř\003j„7¤Ň\nťä_\004m@ß\0Ă"c\0271˝ZnĚ55’v'

正如我们现在所看到的,在我的(甚至还没有)字符串中的某个地方有一个神秘的 nul 东西。我不太关心nul,我只需要传递这段数据作为hmac的输入。

  1. 是否有可能用 nul 处理字符串,只是为了将其作为输入上层函数进一步插入?
  2. 是否有可能让 hmac 函数 key 参数接受这样的原始对象?

我也尝试了 base64enc 包但没有成功。我尝试了很多不同的转换,但一切都会回到这个简单的“nul in string”。

这些站点相当新,并且此身份验证过程看起来像是其中的标准 API 身份验证。 R 中应该有某种方法来处理该过程。

如果有人想测试,

secret <- '7uM/vsLcpQuOmOUSACFeFsiLtql3jKEwzh3rFg0B8kvNhFL4A2qEN6TSCp3kXwRtQN8AwyJjFzG9Wm7MNTWSdg=='

最佳答案

问题2的答案是:

hmac 函数已经接受原始对象而不是字符串。

这是解决方案:

hmac(key = base64Decode(secret, mode='raw'),
 object = post_data,
 algo = 'sha512',
 raw = TRUE)

关于string - Base64 解码 - 字符串中的 nul,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14964142/

相关文章:

string - Groovy:从给定的字符集生成随机字符串

打印字符串中单词首字母的C程序

python - 如何在Python中为类设置字符串渲染方法

r - 在数据帧中的一个因子的所有级别中选择 n 个随机采样的连续行

r - geom_text_repel 中的条件尺寸和面孔

javascript - 使用 JavaScript 将 png 图像转换为 blob 图像?

java - 字符串base64解码未gziped从little-endian 4字节int到java int

Node.js 从 Web 获取图像并使用 base64 进行编码

java - 字符串以 DRIVELETTER 开头 :\

R-Caret:如何使用多个模型构建更高效的模型并预测新结果