簡體   English   中英

PHP編碼問題:如何將base64編碼的uint8字節編碼為十六進制

[英]PHP encoding problem: how to encode base64 encoded uint8 bytes to hex

My problem is that I was some time ago base64 encoding random bytes from openssl sha256 in C (as uint8_t), feeding them into a shell script and using the output. 我現在可以從我的數據中重新創建的是:


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

output 與 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 中的平等程序是什么(在 shell 中為 od -t x8 )? 我試過 pack / unpack / bin2hex /... 並不能得到相同的結果。

我正在嘗試獲取包含以下內容的字符串:“5293d47410d6f8ba46a7dc976e56cde7ef763798f259b3971a0b400cdf741d97”

base64_decode("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;

它遍歷 8 個字節的塊,然后以相反的順序轉儲它們。

ideone: https://ideone.com/hBanqi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM