Я пытаюсь создать функцию, которая будет запускать частные вызовы API на некоторых сайтах. Все эти сайты используют проверку подлинности с подписью вызова API следующим образом в PHP:base64 decode - nul in string
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__ является ключевым вопросом здесь. Так что следующая вещь, которую я попытался было взять сырой выход из функции декодирования и rawToChar на нем:
str(base64Decode(secret,mode='raw'))
raw [1:64] ee e3 3f be ...
rawToChar(base64Decode(secret,mode='raw'))
Ошибка в rawToChar (base64Decode (секретный режим = «сырой»)): встроенный NUL в строка: 'îă? ľÂÜĄ \ vŽĺ \ 022 \ 0!^\ 026Č <¶ © wŚ0Î \ 035ë \ 026 \ r \ 001ňKÍ "Rř \ 003j" 7¤Ň \ nťä_ \ 004m @ ß \ 0Ă "c \ 0271˝ ZnĚ55'v»
Как мы видим сейчас, есть тайна NUL вещь где-то в моей (даже не) струна. Я не слишком заботится о NUL s, мне просто нужно передать эту часть данных в качестве ввода для hmac.
- Есть ли возможность обрабатывать строку с помощью nul, только для того, чтобы нажимать ее дальше, как входная верхняя функция?
- Есть ли возможность иметь функцию hmac ключ параметр принимает исходный объект?
Я пробовал также пакет base64enc без успеха. Я пробовал много разных конверсий, но все возвращается к этой простой «нулевой строке».
Эти сайты являются довольно новыми, и этот процесс аутентификации выглядит как стандартный API-интерфейс между ними. Там должен быть какой-то способ справиться с этим процессом в R.
Если кто-то хочет проверить,
secret <- '7uM/vsLcpQuOmOUSACFeFsiLtql3jKEwzh3rFg0B8kvNhFL4A2qEN6TSCp3kXwRtQN8AwyJjFzG9Wm7MNTWSdg=='
Я получаю такую же проблему. base64Decode урезает результаты при выводе символов по какой-либо причине ... – bumpkin
@bumpkin использует 'raw' вместо' character'. – jangorecki
Вот что я в итоге сделал. Благодаря! – bumpkin