Как объединить хэш в переполнении стека

Я хотел бы спросить, если как объединить хэш-коды в PHP?

Например, у меня есть некоторые контрольные суммы здесь (только примеры контрольных сумм):

checksum1:b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1
checksum2:dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34
checksum3:4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345

Если у меня есть эти контрольные суммы файла, который будет разбит на 3 части, я должен объединить первые 2 контрольные суммы, а затем объединить последнюю контрольную сумму после.

Редактировать: Объединить означает, что, если я объединю 2 контрольные суммы, будет сгенерирована новая контрольная сумма.

Я хотел бы добиться с помощью кода, что было указано здесь:

Объедините первые два хэша и возьмите двоичный хэш результата.

$ cat hash1 hash2> hash12

$ openssl dgst -sha256 -binary hash12> hash12hash

Это в интерфейсе командной строки. Двоичный результат был позже преобразован в шестнадцатеричный.
Как это возможно для PHP?

-1

Решение

Ты можешь использовать . оператор объединить

        $checksum1='b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1';
$checksum2='dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34';
$checksum3='4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345';

echo $checksum1.$checksum2.$checksum3;
1

Другие решения

Вы можете использовать hash() функция, например, как в следующем цикле for-less:

$checksums = [
'b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1',
'dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34',
'4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345'
];for ($i = 1, $hash = $checksums[0];
$i < sizeof($checksums);
$i++, $hash = hash('sha256', $hash.$checksums[$i]));

echo $hash;

Это вычислит хеш как hash(hash(checksum1 + checksum2) + checksum3)

В своем вопросе вы используете -binary флаг с openssl dgst команда. Вы можете сделать то же самое в PHP, передав true значение в качестве третьего параметра при обращении к PHP hash() функция, но я не понимаю, как это имеет значение, если вы начнете комбинировать более двух хешей.

Обновить

В комментариях было ясно, что реальная цель состоит в том, чтобы вычислить хэш дерева для использования с AWS. Самый простой способ сделать это — использовать TreeHash класс из AWS SDK для PHP.

1

Я уже нашел ответ на свой вопрос. я использовал Хэш дерева класс в AWS SDK и добавьте контрольные суммы, используя addChecksum и передайте контрольную сумму каждого разбитого файла, чтобы сопоставить 2 контрольные суммы.
Спасибо за идеи.

1

Я бы взорвался, а потом взорвался Отлично подходит для хранения хэшей в файлах и т. Д.

<?php

$checkSums = Array(
"b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1",
"dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34",
"4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345");
//simply combine via $checksum1 . '|' . $checksum2 . '|' . $checksum3, and then explode it the way listed bellow

$combined = implode('|', $checkSums);

$notCombined = explode('|', $combined);

?>
0

Просто вызвать openssl с system() или же exec()

<?php
$checksum = system( "openssl dgst -sha256 -binary hash12" );
?>
0
По вопросам рекламы [email protected]