Как получить первые четыре байта HMAC_SHA256(x,y)

#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. привет, братан. можете ли вы помочь мне в моем новом обзоре?