我試圖創建將在一些網站上運行私有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