一部のサイトでプライベート API 呼び出しを実行する関数を作成しようとしています。これらのサイトはすべて、php で次のように API 呼び出しの署名による認証を使用しています。
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 = base64Decode(secret)
問題は、hmac 関数は文字列値のみを受け入れますが、base64Decode は単なる文字列以外のものを返す可能性があることです:
str(base64Decode(secret))
chr "îă?ľÂÜĄ\vŽĺ\022""| __truncated__
この__truncated__がここでの重要な問題です。だから私が試した次のことは、decode 関数と rawToChar から生の出力を取得することでした:
str(base64Decode(secret,mode='raw'))
raw [1:64] ee e3 3f be ...
rawToChar(base64Decode(secret,mode='raw'))
rawToChar(base64Decode(secret,mode='raw')) のエラー: 文字列に nul が埋め込まれています: 'îă?ľÂÜĄ\vŽĺ\022\0!^\026Č‹¶©wŚˇ0Î\035ë\026\r\001ňKÍ„Rř\ 003j„7¤Ň\nťä_\004m@ß\0Ă"c\0271˝ZnĚ55'v'
今見てわかるように、私の (まだ) 文字列のどこかに謎のヌルがあります。nul についてはあまり気にしません。このデータを hmac の入力として渡すだけで済みます。
- 入力上位関数として文字列をさらにプッシュするためだけに、文字列を nul で処理する可能性はありますか?
- hmac ファンクションキーパラメータにこのような生のオブジェクトを受け入れる可能性はありますか?
base64enc パッケージも試してみましたが、成功しませんでした。私は多くの異なる変換を試みましたが、すべてがこの単純な「文字列内のヌル」に戻っています。
これらのサイトはかなり新しく、この認証プロセスは標準の API 認証のように見えます。Rでそのプロセスを処理する方法が必要です。
テストしたい人がいたら、
secret <- '7uM/vsLcpQuOmOUSACFeFsiLtql3jKEwzh3rFg0B8kvNhFL4A2qEN6TSCp3kXwRtQN8AwyJjFzG9Wm7MNTWSdg=='