Байтовый массив декодирования Base64 - токен APNS от iOS

0

Я получаю токен устройства, закодированный как массив base64 "byte". Ввод выглядит следующим образом:

J6Kwrh15AqXKiaQminI/Eb/Mtj4nMkPhQYsROhJXmes=

Мне сказали, что это кодированное значение base64, но его декодирование с использованием base64_decode возвращается:

string(32) "'¢°y¥Ê‰¤&Šr?¿Ì¶>'2CáA‹:Wë"

Я где-то нашел этот скрипт, который должен выводить фактический токен APNS:

$a = base64_decode("J6Kwrh15AqXKiaQminI/Eb/Mtj4nMkPhQYsROhJXmes=");
$b = array();

foreach(str_split($a) as $c)
    $b[] = sprintf("%08b", ord($c));

exit(implode(' ', $b));

Но он возвращает:

00100111 10100010 10110000 10101110 00011101 01111001 00000010 10100101 11001010 10001001 10100100 00100110 10001010 01110010 00111111 00010001 10111111 11001100 10110110 00111110 00100111 00110010 01000011 11100001 01000001 10001011 00010001 00111010 00010010 01010111 10011001 11101011

И я бы ожидал чего-то вроде:

c9d4c07c fbbc26d6 ef87a44d 53e16983 1096a5d5 fd825475 56659ddd f715defc

Что не так?

Теги:
apple-push-notifications

1 ответ

1
Лучший ответ

Чтобы создать шестнадцатеричный, вы можете использовать что-то вроде этого:

$a = unpack("H*", base64_decode("J6Kwrh15AqXKiaQminI/Eb/Mtj4nMkPhQYsROhJXmes="));
print_r($a);

($a теперь массив с вашим шестнадцатеричным)

Чтобы включить интервал, вы можете использовать:

$a = unpack("H*hex", base64_decode("J6Kwrh15AqXKiaQminI/Eb/Mtj4nMkPhQYsROhJXmes="));
$b = str_split($a["hex"], 8);
$output = "";
foreach ($b as $current) {
    $output .= "$current ";
}
echo($output);

и, наконец, все завернутое в функцию:

function base64_decode_apns_token($token) {
    $a = unpack("H*hex", base64_decode($token));
    $b = str_split($a["hex"], 8);
    $output = "";

    foreach ($b as $current) {
        $output .= "$current ";
    }

    return trim($output);
}
  • 0
    Извините - это не работает. Смотрите fiddle: ideone.com/rd0mHR - все они возвращают один и тот же результат
  • 0
    Если это может помочь: «Токен представляет собой непрозрачную структуру двоичных данных, встроенную в объект NSData. Apple не хочет, чтобы вы возились с его внутренними компонентами. Для наших целей достаточно знать, что в настоящее время он имеет длину 32 байта. Как вы можете видеть выше, токен может быть представлен 64 шестнадцатеричными символами. Вы будете использовать его в этом формате, хотя вы по-прежнему снимаете скобки и оставляете пробелы. "
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню