Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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
NodeJS:Hash sha512原始二进制(从PHP转换)_Php_Node.js_Sha512 - Fatal编程技术网

NodeJS:Hash sha512原始二进制(从PHP转换)

NodeJS:Hash sha512原始二进制(从PHP转换),php,node.js,sha512,Php,Node.js,Sha512,在我的PHP应用程序中,我有一个函数,可以像这样散列字符串 #!/usr/bin/php <?php $hash = 'The quick brown fox jumps over the lazy dog'; for ($i = 1; $i <= 4; $i++) { $hash = hash('sha512', $hash, true); } $hash = hash('sha512', $hash, false); echo $hash; echo "\n";

在我的PHP应用程序中,我有一个函数,可以像这样散列字符串

#!/usr/bin/php
<?php
$hash = 'The quick brown fox jumps over the lazy dog';

for ($i = 1; $i <= 4; $i++) {
    $hash = hash('sha512', $hash, true);
}

$hash = hash('sha512', $hash, false);

echo $hash;
echo "\n";
但我得到了一个不同的结果

684806A7C59BA904DCEEBF5E286077AA59157B945E5302C7A268F03505B61589BF6F7264E82B2F0969FD317E7CE5D39A1B059978BE96819F9A1FA837A329BBD2

问题似乎来自二进制部分。如果我只是散列文本,我会得到相同的结果

如果你知道问题出在哪里,请告诉我。谢谢


编辑:PHP代码无法更改,它是一个正常工作的PHP应用程序的代码,我需要将该应用程序转换为Node JS,并陷入这个二进制问题。

工作正常。删除了循环,因为我正在控制台中工作

var hash = 'The quick brown fox jumps over the lazy dog';     
hash = crypto.createHash('sha512').update(hash).digest('hex');
hash = crypto.createHash('sha512').update(hash).digest('hex'); 
hash = crypto.createHash('sha512').update(hash).digest('hex');
hash = crypto.createHash('sha512').update(hash).digest('hex');
hash = crypto.createHash('sha512').update(hash).digest('hex');
console.log(hash)
EB6301FFB2ED389CB952E6D6C22F9C13D015F4DE0C6807852ACC0B005BD36002D772D8766842909EFAC9C9C9FEEDD2E69B105F2B7394424316F9027C80DF8DF0B4

$hash = 'The quick brown fox jumps over the lazy dog';
$hash = hash('sha512', $hash, false)
$hash = hash('sha512', $hash, false)
$hash = hash('sha512', $hash, false)
$hash = hash('sha512', $hash, false)
$hash = hash('sha512', $hash, false)
echo $hash;

EB6301FFB2ED389CB952E6D6C22F9C13D015F4DE0C6807852ACC0B005BD36002D772D8766842909EFAC9C9C9FEEDD2E69B105F2B7394424316F9027C80DF8DF0B4发现问题。没有“二进制”编码。我用错误的方法创建了二进制文件。以下是工作代码:

$hash = 'The quick brown fox jumps over the lazy dog';
$hash = hash('sha512', $hash, false)
$hash = hash('sha512', $hash, false)
$hash = hash('sha512', $hash, false)
$hash = hash('sha512', $hash, false)
$hash = hash('sha512', $hash, false)
echo $hash;
const crypto = require('crypto');

var hash = 'The quick brown fox jumps over the lazy dog';


for (var i = 1; i <= 4; i++) {
    hash = crypto.createHash('sha512').update(hash).digest('hex');
    hash = new Buffer(hash, "hex");
}

hash = crypto.createHash('sha512').update(hash).digest('hex');

console.log(hash);
const crypto=require('crypto');
var hash=‘敏捷的棕色狐狸跳过了懒狗’;

对于(var i=1;我可能存在编码问题。您是否需要将第一步分解为二进制?@wroniasty如果我这样做,它只会创建另一个不同的哈希。只需fine@wroniasty请用您的代码发布一个答案。谢谢!谢谢您的回答,但是您不能在PHP代码中禁用原始二进制,它应该始终是
$hash=hash('sha512',$hash,true)
。我试图使NodeJS版本与原始PHP版本的工作原理相同。如果我们这样做,NodeJS应用程序的结果与PHP应用程序的结果不一样。NodeJS应用程序无法读取/使用PHP应用程序在过去生成的旧结果。