PHP SHA 256未产生预期的输出

时间:2018-12-28 20:05:08

标签: php

我已经工作了几个月的一些PHP代码,以根据某些数据输入生成哈希值。任务是进行两个事务哈希,然后对这两个事务进行哈希处理。我正在使用sha256位算法库来这样做。我注意到的问题是预期结果没有出来。

我试图:

  1. 检查变量是否为字符串(注意:hash()函数的算法和输入变量均需要字符串。
  2. 哈希函数输入的代码已正确输出。

我不知所措。 另外,我使用文件读取结果并将结果输入到数组中,因为PHP刷新了页面,从而导致数据丢失。

我遇到麻烦的PHP函数如下所示:

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;                     
            } 
        }

如果要输入以下内容:

区块链名称:肖恩

发件人:肖恩

金额:2

接收方:Bob

随机数:2

我希望它是6a3ea3befedebacdce2692e91623b23e8e74b9bfff2eedaf4db2470fb3efc6db 设置两次交易后。

我反而得到90189390a229292338f2d6a2e98cec46751ce0ae6b18fa0d3be56681c8cedf44这是不正确的。

我不确定为什么会发生这种情况,以及现在如何解决。

我的完整程序可以在https://github.com/seansanders/PHPSHABlockchain/blob/master/LedgerProgramV4.php

上找到

请注意,我为用户留下了故障排除注释,并以绿色标记了该颜色。

程序中还发生了其他可疑的事情:

1)正在被哈希处理的两个事务哈希不能产生预期的正确哈希值。

2)我注意到在提交三笔交易后,我正在写入的测试文件存储的数据超出了预期。我认为这是直接与if语句有关的问题,而我在某个地方出错了。

我已尽力遵守最佳编码实践,并使代码尽可能易于阅读。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我发现解决该问题的方法是简单地更改为使用CSV文件。原因是文本文件中有一些我认为是/ r / n引起的有趣字符。感谢所有提供帮助的人。