PHP SHA 256 не дает ожидаемого результата

Я работал пару месяцев над некоторым PHP-кодом, чтобы сгенерировать хеш-значение из некоторых вводимых данных. Задача состоит в том, чтобы взять два хеша транзакции и хешировать две транзакции. Для этого я использую библиотеку алгоритмов sha256 bit. Проблема, которую я замечаю, заключается в том, что ожидаемый результат не выходит.

Я пытался:

  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

Получатель: Боб

Одноразовый номер: 2

Я ожидал, что это будет 6a3ea3befedebacdce2692e91623b23e8e74b9bfff2eedaf4db2470fb3efc6db после установки двух транзакций.

Вместо этого я получаю 90189390a229292338f2d6a2e98cec46751ce0ae6b18fa0d3be56681c8cedf44, что неверно.

Я не уверен, почему это происходит и как это исправить на данный момент.

Мою полную программу можно найти на https://github.com/seansanders/PHPSHABlockchain/blob/master/LedgerProgramV4.php

Обратите внимание: я оставил комментарии по устранению неполадок, которые для пользователя обозначены зеленым цветом.

В программе произошли и другие подозрительные вещи:

1) Два хешируемых хеш-значения транзакций не дают правильного ожидаемого хеш-значения.

2) Я заметил, что тестовый файл, в который я пишу, помещает больше данных, чем ожидалось, после отправки трех транзакций. Я думаю, что это проблема непосредственно с операторами if, и я где-то ошибаюсь.

Я изо всех сил старался придерживаться лучших практик программирования и сделать код максимально простым для чтения. Любая помощь будет принята с благодарностью.

Возможно, вам понадобится перейти к Code Review в StackExchange ...

Geno Chen 28.12.2018 21:09

Ваш код очень запутан для понимания. Вы можете попробовать отладить и сузить список до нескольких строк проблемы. Советую прочитать про PHP PSR и чистый код. Это действительно поможет вам написать лучший код и, следовательно, изолировать логику и, в конечном итоге, некоторые проблемы.

Felippe Duarte 28.12.2018 21:16

Немногие люди, если таковые имеются, будут тратить время на просмотр более 100 строк в основном несвязанного кода, чтобы найти соответствующие биты. Сократите код до абсолютного минимума, необходимого для воспроизведения проблемы. stackoverflow.com/help/mcve

Sammitch 28.12.2018 22:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
193
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме