PHP SHA 256未生成预期输出
我已经在一些PHP代码上工作了几个月,以从一些数据输入生成哈希值。任务是对两个事务进行哈希运算,并对这两个事务进行哈希运算。我正在使用sha256位算法库来实现这一点。我注意到的问题是预期结果没有出来 我试图:PHP SHA 256未生成预期输出,php,Php,我已经在一些PHP代码上工作了几个月,以从一些数据输入生成哈希值。任务是对两个事务进行哈希运算,并对这两个事务进行哈希运算。我正在使用sha256位算法库来实现这一点。我注意到的问题是预期结果没有出来 我试图: 检查变量是否为字符串(注意:hash()函数要求算法和输入变量都有一个字符串 哈希函数输入的代码已正确输出 我不知道问题出在哪里。 此外,我使用文件读取结果并将其输入数组,因为PHP刷新页面,从而导致数据丢失 我在PHP中遇到的问题如下所示: function printTransact
function printTransactions($ArrayName, $Name){
$counter = 1;
$BlockNumber = 0;
$HashesFromFileArray = readfileToArray($Name."Hash.txt");
array_pop($HashesFromFileArray);
foreach ($ArrayName as $LineFromFile){
PrintoutToUser("yellow", "3", "Transaction " . $counter . " <font color='white'>" . $LineFromFile . "</font>");
If ($counter % 2 == 0) {
$BlockNumber = $BlockNumber + 1;
if(isset($HashesFromFileArray[$counter -1])=="1" && isset($HashesFromFileArray[$counter -2])=="1" && gettype($HashesFromFileArray[$counter -1])!="NULL"){
if(strlen($HashesFromFileArray[$counter -1])>=66 && strlen($HashesFromFileArray[$counter -2])>=66){
$HashValueOfBothTransactions = GetNewHash($HashesFromFileArray[$counter -2].$HashesFromFileArray[$counter -1], "sha256");
$TransactionInputCounter = $counter-1;
$TransactionInputCounter2 = $counter;
PrintoutToUser("green", "3", "T". $TransactionInputCounter.":" . $HashesFromFileArray[$counter -2]);
PrintoutToUser("green", "3", "T". $TransactionInputCounter2.":" . $HashesFromFileArray[$counter -1]);
PrintoutToUser("blue", "3", "Data Hashed " . $HashesFromFileArray[$counter -2].$HashesFromFileArray[$counter -1]." Length of Array input 1 and 2 is " . strLen($HashesFromFileArray[$counter -2]) . " and " . strLen($HashesFromFileArray[$counter -2]));
PrintoutToUser("red", "3", "End of Block: " .$BlockNumber . ":". $HashValueOfBothTransactions . "<br />");
writeToFileDataPlain("TESTING", $HashValueOfBothTransactions);
}
}
}
$counter = $counter + 1;
}
}
函数printTransactions($ArrayName,$Name){
$counter=1;
$BlockNumber=0;
$HashesFromFileArray=readfileToArray($Name.“Hash.txt”);
数组\u pop($HashesFromFileArray);
foreach($ArrayName作为$LineFromFile){
打印输出程序(“黄色”、“3”、“事务”。$counter。”“$LineFromFile。””);
如果($counter%2==0){
$BlockNumber=$BlockNumber+1;
if(isset($HashesFromFileArray[$counter-1])==“1”&&isset($HashesFromFileArray[$counter-2])==“1”&&gettype($HashesFromFileArray[$counter-1])!=“NULL”){
如果(strlen($HashesFromFileArray[$counter-1])>=66和&strlen($HashesFromFileArray[$counter-2])>=66){
$HashValueOfBothTransactions=GetNewHash($HashesFromFileArray[$counter-2]。$HashesFromFileArray[$counter-1],“sha256”);
$TransactionInputCounter=$counter-1;
$TransactionInputCounter2=$counter;
PrintoutToUser(“绿色”、“3”、“T”。$TransactionInputCounter。”:“$HashesFromFileArray[$counter-2]);
PrintoutToUser(“绿色”、“3”、“T”。$TransactionInputCounter2.”:“$HashesFromFileArray[$counter-1]);
PrintoutToUser(“蓝色”、“3”、“数据哈希”。$HashesFromFileArray[$counter-2]。$HashesFromFileArray[$counter-1]。”数组输入1和2的长度为“.strLen($HashesFromFileArray[$counter-2])”和“.strLen($HashesFromFileArray[$counter-2]);
PrintoutToUser(“红色”、“3”、“块末尾:”.$BlockNumber.:“$HashValueOfBottoTransactions.”
);
writeToFileDataPlain(“测试“,$HashValueOfBottoTransactions);
}
}
}
$counter=$counter+1;
}
}
如果我加入以下内容:
区块链名称:肖恩
发件人:肖恩
金额:2
接受者:鲍勃
临时:2
我希望在BACDCE2692E91623B23E8E74B9BFFF2EEDAF4DB2470FB3EFC6DB之前是6A3EA3
设置两个事务之后
我得到的是90189390A2292338F2D6A2E98CEC46751CE0AE6B18FA0D3BE56681C8CEDF44,这是不正确的
我不知道为什么会发生这种情况,目前如何解决
我的完整程序可以在
注意,我在中留下了故障排除注释,这些注释的颜色编码为绿色,供用户使用
该计划中还发生了其他一些可疑事件:
1) 正在散列的两个事务散列没有生成预期的正确散列值
2) 我注意到,在提交三个事务之后,我正在编写的测试文件中放入的数据比预期的要多。我认为这是if语句的直接问题,我在某个地方出错了
我已经尽了最大努力坚持最佳编码实践,并使代码尽可能容易阅读。任何帮助都将不胜感激。我发现解决这个问题的方法就是简单地改为使用CSV文件。原因是文本文件中出现了一些有趣的字符,我怀疑是由于/r/n。感谢所有帮助过您的人。您可能需要转到StackExchange中的代码审阅…您的代码很难理解。您可以尝试调试,并将问题缩小到几行。我建议您阅读PHP PSR和干净的代码。它将真正帮助您编写更好的代码,从而隔离逻辑,并最终解决一些问题。很少有人(如果有的话)会花时间查看100多行几乎不相关的代码,以找到相关的位。将代码减少到再现问题所需的绝对最小值。