【问题标题】:Base64 decode byte array - APNS token from iOSBase64 解码字节数组 - 来自 iOS 的 APNS 令牌
【发布时间】:2015-01-02 18:22:16
【问题描述】:

我收到一个设备令牌,编码为 base64“字节”数组。输入如下所示:

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

怎么了?

【问题讨论】:

    标签: php ios apple-push-notifications


    【解决方案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);
    }
    

    【讨论】:

    • 对不起——这不起作用。参见小提琴:ideone.com/rd0mHR - 它们都返回相同的输出
    • 如果这有帮助:“令牌是一个不透明的二进制数据结构,填充到一个 NSData 对象中。Apple 不希望你弄乱它的内部。对于我们的目的,知道就足够了它目前是 32 字节长。正如您在上面看到的,令牌可以用 64 个十六进制字符表示。您将以这种格式使用它,尽管您仍然去掉括号并省略空格。"
    • 好吧,如果您的函数每次都解码相同的令牌,那么您的代码当然不起作用! (请看我的回答)
    • 哈哈。对不起。那太可怕了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2021-12-21
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多