Я хотел бы спросить, если как объединить хэш-коды в PHP?
Например, у меня есть некоторые контрольные суммы здесь (только примеры контрольных сумм):
checksum1:b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1
checksum2:dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34
checksum3:4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345
Если у меня есть эти контрольные суммы файла, который будет разбит на 3 части, я должен объединить первые 2 контрольные суммы, а затем объединить последнюю контрольную сумму после.
Редактировать: Объединить означает, что, если я объединю 2 контрольные суммы, будет сгенерирована новая контрольная сумма.
Я хотел бы добиться с помощью кода, что было указано здесь:
Объедините первые два хэша и возьмите двоичный хэш результата.
$ cat hash1 hash2> hash12
$ openssl dgst -sha256 -binary hash12> hash12hash
Это в интерфейсе командной строки. Двоичный результат был позже преобразован в шестнадцатеричный.
Как это возможно для PHP?
Ты можешь использовать . оператор объединить
$checksum1='b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1';
$checksum2='dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34';
$checksum3='4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345';
echo $checksum1.$checksum2.$checksum3;
Вы можете использовать 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.
Я уже нашел ответ на свой вопрос. я использовал Хэш дерева класс в AWS SDK и добавьте контрольные суммы, используя addChecksum
и передайте контрольную сумму каждого разбитого файла, чтобы сопоставить 2 контрольные суммы.
Спасибо за идеи.
Я бы взорвался, а потом взорвался Отлично подходит для хранения хэшей в файлах и т. Д.
<?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);
?>
Просто вызвать openssl
с system()
или же exec()
<?php
$checksum = system( "openssl dgst -sha256 -binary hash12" );
?>