我想问一下如何在PHP中组合哈希码?
例如,我在这里有一些校验和(只是样本校验和):
checksum1:b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1
checksum2:dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34
checksum3:4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345
如果我将这些文件的样本校验和分成3个部分,我必须合并前2个校验和,然后合并最后的校验和。
编辑:组合意味着如果我合并2个校验和,它将生成新的校验和。
我想通过代码实现这里所说的内容:
合并前两个哈希并获取结果的二进制哈希值。
$ cat hash1 hash2> hash12
$ openssl dgst -sha256 -binary hash12> hash12hash
这是在命令行界面中。二进制结果后来转换为十六进制。 PHP怎么可能?
答案 0 :(得分:1)
你可以使用。运算符组合
$checksum1='b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1';
$checksum2='dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34';
$checksum3='4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345';
echo $checksum1.$checksum2.$checksum3;
答案 1 :(得分:1)
您可以使用hash()
函数,例如,如下面的无体for循环:
$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的树形哈希。最简单的方法是使用AWS SDK for PHP中的TreeHash
类。
答案 2 :(得分:1)
我已经找到了问题的答案。我在AWS开发工具包中使用了Tree hash类,并使用save_word2vec_format()
函数添加了校验和,并传递了每个分割文件的校验和,以便使2个校验和匹配。
谢谢你的想法。
答案 3 :(得分:0)
我会内爆然后爆炸它。它非常适合在文件等中存储哈希值:
<?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);
?>
答案 4 :(得分:0)
只需使用openssl
或system()
exec()
即可
<?php
$checksum = system( "openssl dgst -sha256 -binary hash12" );
?>