PHP编码问题:如何将base64编码的uint8字节编码为十六进制

我的问题是,我前段时间对base64进行了C语言中来自openssl sha256的随机字节编码(如uint8_t),将其输入到Shell脚本中并使用输出。 我现在可以从数据中重新创建的是:


file.txt的内容: uvjWEHTUk1LnzVZul9ynRpezWfKYN3bvlx103wxACxo

test@test:~# base64 -d file.txt | od -t x1 0000000 ba f8 d6 10 74 d4 93 52 e7 cd 56 6e 97 dc a7 46 0000020 97 b3 59 f2 98 37 76 ef 97 1d 74 df 0c 40 0b 1a

输出与在PHP中调用相同:

echo bin2hex(base64_decode("uvjWEHTUk1LnzVZul9ynRpezWfKYN3bvlx103wxACxo=")); baf8d61074d49352e7cd566e97dca74697b359f2983776ef971d74df0c400b1a


我一直在shell中做的并且现在需要在PHP中做的事情如下:

同样,file.txt的内容相同: uvjWEHTUk1LnzVZul9ynRpezWfKYN3bvlx103wxACxo

test@test:~# base64 -d file.txt | od -t x8 0000000 5293d47410d6f8ba 46a7dc976e56cde7 0000020 ef763798f259b397 1a0b400cdf741d97

我的问题在这里:PHP中的等效过程是什么(在外壳中为od -t x8)? 我尝试打包/拆包/ bin2hex / ...,但无法获得相同的结果。

我正在尝试获取具有以下内容的字符串: “ 5293d47410d6f8ba46a7dc976e56cde7ef763798f259b3971a0b400cdf741d97”

base64_decode("uvjWEHTUk1LnzVZul9ynRpezWfKYN3bvlx103wxACxo=")的起点开始。有什么想法吗?

bonaxi 回答:PHP编码问题:如何将base64编码的uint8字节编码为十六进制

如果您真正需要x8,即8字节,那么实现将非常简单

<?php

$str = 'uvjWEHTUk1LnzVZul9ynRpezWfKYN3bvlx103wxACxo';
$bin = base64_decode($str);

if (strlen($bin) % 8 !== 0) {
    throw new \RuntimeException('data length should be divisible by 8');
}

$result = '';

for ($i = 0; $i < strlen($bin); $i += 8) {
    for ($j = $i + 7; $j >= $i; --$j) {
        $result .= bin2hex($bin[$j]);
    }
}

echo $result;

迭代8个字节的块,然后以相反顺序转储它们。

Idone:https://ideone.com/hBanqi

本文链接:https://www.f2er.com/3113673.html

大家都在问