#php #byte #hmac
Вопрос:
Я реализую доказуемый алгоритм. Один из шагов состоит в том, чтобы получить первые четыре байта хэшированного значения в виде отдельных целых чисел. Как мне извлечь байты?
Вот что я попытался сделать:
<?php
$ServerSeed = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
$ClientSeed ="3333";
$Nonce="10";
$Row_number = "1";
$Data = "{$ClientSeed}:{$Nonce}:{$Row_number}:0";
$Random = hash_hmac('sha256', $ServerSeed , $Data);
$First4Bytes= mb_substr($Random, 0, 4);
Как мне получить первые четыре байта чисел $Random
as (e.g. [35, 33, 112, 121])
?
Ответ №1:
Вы можете установить binary
опцию в функции hash_hmac для получения необработанных двоичных данных, распаковать их в «байты», а затем использовать функцию array_slice, чтобы получить нужные вам байты:
test.php:
<?php
$data = "Top Secret";
$hash = hash_hmac('sha256', $data, 'secret', true);
printf("%sn", bin2hex($hash));
$byte_array = array_values(unpack('C*', $hash));
// print_r($byte_array);
print_r(array_slice($byte_array, 0, 4));
print_r(array_slice($byte_array, -4, 4));
Тест:
$ php -f test.php
eb409b96bca8118b7e2067b9419d598d928f53251619665743980119de884bfb
Array
(
[0] => 235
[1] => 64
[2] => 155
[3] => 150
)
Array
(
[0] => 222
[1] => 136
[2] => 75
[3] => 251
)
Комментарии:
1. thx , за ваш ответ , но почему вы использовали (-4 , 4) ?
2. Это просто еще один пример, показывающий, что вы также можете получить последние четыре байта и т. Д.
3. привет, братан. можете ли вы помочь мне в моем новом обзоре?