PHP编码问题:如何将base64编码的uint8字节编码为十六进制
我的问题是,我不久前用C(作为uint8_t)对openssl sha256中的随机字节进行base64编码,将它们输入shell脚本并使用输出。 我现在可以从我的数据中重新创建:PHP编码问题:如何将base64编码的uint8字节编码为十六进制,php,shell,base64,bin2hex,od,Php,Shell,Base64,Bin2hex,Od,我的问题是,我不久前用C(作为uint8_t)对openssl sha256中的随机字节进行base64编码,将它们输入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 00000
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
00000 20 97 b3 59 f2 98 37 76 ef 97 1d 74 df 0c 40 0b 1a
输出与在PHP中调用相同:
echo bin2hex(base64_解码(“uvjWEHTUk1LnzVZul9ynRpezWfKYN3bvlx103wxACxo=”)代码>
baf8d61074d49352e7cd566e97dca74697b359f2983776ef971d74df0c400b1a
我一直在shell中做的事情以及现在在PHP中需要做的事情如下:
同样,file.txt的相同内容:
uvjWEHTUk1LnzVZul9ynRpezWfKYN3bvlx103wxACxo
test@test:~#base64-d file.txt | od-t x8
0000000 5293d47410d6f8ba 46a7dc976e56cde7
0000020 ef763798f259b397 1a0b400cdf741d97
我的问题是:现在PHP中的相等过程是什么(到shell中的od-t x8)?
我试过打包/解包/bin2hex/。。。而不能得到同样的结果
我正在尝试获取包含以下内容的字符串:
“5293d47410d6f8ba46a7dc976e56cde7ef763798f259b3971a0b400cdf741d97”
从base64_解码的起点(“uvjWEHTUk1LnzVZul9ynRpezWfKYN3bvlx103wxACxo=”)
。有什么想法吗?如果您真正需要的是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;
echo bin2hex(base64_decode($x))
的对立面不是base64_encode(hex2bin($x))
?@miken32完全正确,而是base64_encode(hex2bin(“5293d47410d6f8ba46a7dc976e56cde7ef763798f259b3971a0b400cdf741d97”);这不是我需要/寻找的(uvjWEHTUk1LnzVZul9ynRpezWfKYN3bvlx103wxACxo)您是否意识到x8
是8字节而不是8位?你真的需要x8
而不是x1
?@zerkms是的,现在我知道最初的假设是错误的,但现在已经太晚了。x8是必需的…非常感谢您解决了这个问题,它很有效!正如您所评论的,x8是一个错误的选择,但是由于数据已经像这样记录,您的答案是正确的。