Я работал пару месяцев над некоторым PHP-кодом, чтобы сгенерировать хеш-значение из некоторых вводимых данных. Задача состоит в том, чтобы взять два хеша транзакции и хешировать две транзакции. Для этого я использую библиотеку алгоритмов sha256 bit. Проблема, которую я замечаю, заключается в том, что ожидаемый результат не выходит.
Я пытался:
Я не понимаю, в чем проблема. Кроме того, я использую файлы для чтения и ввода результатов в массив, потому что 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
Получатель: Боб
Одноразовый номер: 2
Я ожидал, что это будет 6a3ea3befedebacdce2692e91623b23e8e74b9bfff2eedaf4db2470fb3efc6db после установки двух транзакций.
Вместо этого я получаю 90189390a229292338f2d6a2e98cec46751ce0ae6b18fa0d3be56681c8cedf44, что неверно.
Я не уверен, почему это происходит и как это исправить на данный момент.
Мою полную программу можно найти на https://github.com/seansanders/PHPSHABlockchain/blob/master/LedgerProgramV4.php
Обратите внимание: я оставил комментарии по устранению неполадок, которые для пользователя обозначены зеленым цветом.
В программе произошли и другие подозрительные вещи:
1) Два хешируемых хеш-значения транзакций не дают правильного ожидаемого хеш-значения.
2) Я заметил, что тестовый файл, в который я пишу, помещает больше данных, чем ожидалось, после отправки трех транзакций. Я думаю, что это проблема непосредственно с операторами if, и я где-то ошибаюсь.
Я изо всех сил старался придерживаться лучших практик программирования и сделать код максимально простым для чтения. Любая помощь будет принята с благодарностью.
Ваш код очень запутан для понимания. Вы можете попробовать отладить и сузить список до нескольких строк проблемы. Советую прочитать про PHP PSR и чистый код. Это действительно поможет вам написать лучший код и, следовательно, изолировать логику и, в конечном итоге, некоторые проблемы.
Немногие люди, если таковые имеются, будут тратить время на просмотр более 100 строк в основном несвязанного кода, чтобы найти соответствующие биты. Сократите код до абсолютного минимума, необходимого для воспроизведения проблемы. stackoverflow.com/help/mcve






Я обнаружил, что решением проблемы было просто перейти на использование файла CSV. Причина заключалась в том, что в текстовом файле появлялись забавные символы, которые, как я подозреваю, были связаны с / r / n. Спасибо всем, кто помог.
Возможно, вам понадобится перейти к Code Review в StackExchange ...