Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中组合哈希_Php_Hash_Hashcode - Fatal编程技术网

如何在PHP中组合哈希

如何在PHP中组合哈希,php,hash,hashcode,Php,Hash,Hashcode,我想问一下,如何在PHP中组合哈希代码 例如,我这里有一些校验和(仅示例校验和): 如果我有一个文件的样本校验和,它将被分成3部分,我必须组合前2个校验和,然后组合后的最后一个校验和 编辑:合并意味着如果我合并2个校验和,它将生成新的校验和 我希望通过代码实现此处所述的目标: 将前两个哈希值组合起来,并获取结果的二进制哈希值 $cat hash1 hash2>hash12 $openssl dgst-sha256-二进制哈希12>hash12hash 这在命令行界面中。二进制结果后来被转换成十六

我想问一下,如何在PHP中组合哈希代码

例如,我这里有一些校验和(仅示例校验和):

如果我有一个文件的样本校验和,它将被分成3部分,我必须组合前2个校验和,然后组合后的最后一个校验和

编辑:合并意味着如果我合并2个校验和,它将生成新的校验和

我希望通过代码实现此处所述的目标:

将前两个哈希值组合起来,并获取结果的二进制哈希值

$cat hash1 hash2>hash12

$openssl dgst-sha256-二进制哈希12>hash12hash

这在命令行界面中。二进制结果后来被转换成十六进制。
PHP是如何实现的?

您可以使用。联合收割机操作员

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

echo $checksum1.$checksum2.$checksum3;

我会内爆然后引爆它。它非常适合在文件等中存储哈希:

<?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);

?>

只需使用
system()或
exec()调用
openssl


您可以使用该函数,例如在以下无正文for循环中:

$checksums = [ 
    'b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1',
    'dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34',
    '4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345'
];


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

echo $hash;
$checksums=[
‘b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1’,
“dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34”,
“4324298SDFHSHDHFSDHFSDHFSDHF387455HSDFHSDF9358903485JSDFJSDJFSIUF03458345”
];
对于($i=1,$hash=$checksums[0];
$i
这会将哈希计算为
hash(hash(checksum1+checksum2)+checksum3)

在您的问题中,您可以将
-binary
标志与
openssldgst
命令一起使用。在PHP中,可以通过将
true
值作为调用PHP
hash()
函数的第三个参数来实现同样的功能,但是如果开始组合两个以上的哈希,我并不认为这有什么意义

更新


在评论中,有人明确指出,实际的目标是计算一个树散列,以便与AWS一起使用。最简单的方法是使用AWS SDK for PHP中的类。

我已经找到了问题的答案。我在AWS SDK中使用了类,并使用
addChecksum
函数添加校验和,并传递每个分割文件的校验和,以使2个校验和匹配。
谢谢你的想法。

定义你所说的“组合”是什么意思。@RobbyCornelissen,我的意思是组合哈希代码,就像我组合前两个校验和一样,它将生成新的校验和。我将更新我的问题为什么输出二进制?您的示例校验和是字母数字的,但您的openssl示例输出二进制。你似乎不知道你的老师想要什么样的输出。嗨@Jim U,我试过在项目中禁用系统功能。当问问题时,告诉我们,你被困在哪里。这也将帮助我们更好地回答您的问题。如果您需要使用本机php函数生成openssl解决方案,请参阅“我尝试了您的方法,但最终的校验和仍然与Amazon glacier如何计算我的文件的校验和不匹配”。最初,我提供了整个文件的校验和,而没有使用hash_file函数将其拆分,但是请求的结果表明我提供的校验和与它们不同。这里有台阶[计算校验和,但我很难将其转换为代码。这就是为什么我尝试拆分部分,合并校验和,但它仍然是不匹配的校验和。嗯…这是在你最初的问题中不会不合适的信息。你有预期的输出值吗?Rob,是的,我文件的校验和是:
5FA66F717951B770FFEFC9EE9DB5FA431BBA5ED3135EC626D3E5204401EB9A6
,它们的计算值是这个
ca20a6f0cea34fa23ef4cd04f782554b279f30a754ecba46ca5b65842dfdc785
。我只是使用
散列文件
函数来获取文件的校验和。我真的不知道校验和有什么问题。这个值是与您提供的三个校验和相对应的值,对吗?我是说,这是我们正在讨论的同一个文件?不,Rob,对不起,这只是示例校验和。我只是想知道这些校验和如何组合。只是代码的算法。但我最近提供给您的是文件的正确校验和,没有拆分信息技术
<?php
$checksum = system( "openssl dgst -sha256 -binary hash12" );
?>
$checksums = [ 
    'b62e146dbc34b6f7dd0d7b1dc4e6c93ebc2a0016793e3af701fe4f3eab3299d1',
    'dsfhsdf8s6f87e4r34ijtr5i34u5934534534ij5340598348534095834095j34',
    '4324298sdfhsdhfsdhf387455hsdfhsdf9358903485jsdfjsdjfsiuf03458345'
];


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

echo $hash;