У меня проблема с проектом, связанным с базовой криптовалютой.Одним из требований является проверка хеша предыдущей строки по сравнению с хешем, указанным в файле.По сути, вы вычислите хеш SHA-256 предыдущей строки, сравните его с предоставленным хешем и сгенерируете исключение, если действительный хеш не был предоставлен.
Однако я получаю сообщение об ошибке, и я сузил ее до фактического хеширующего кода.Насколько я могу судить, я убедился, что файл читается правильно, но как только появляется метод, который преобразует вычисленный хэш byte[]
в предоставленный хэш, он находит их не эквивалентными и выдает исключение.Я пытался отладить, но я действительно не уверен, где проблема.
Мой код ниже.Спасибо!
if (block_line == null && block_hash == "0")
{
return true; //genesis block, special hash
}
//remove new lines and tabs
block_line = block_line.replaceAll("\\r\\n", "");
byte[] hash = null;
byte[] file_hash = block_hash.getBytes();
try
{
//create SHA-256 hash of raw line to ensure following hash is correct
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(block_line.getBytes());
hash = md.digest();
}
catch (NoSuchAlgorithmException nsaex)
{
System.err.println("No SHA-256 algorithm found.");
System.err.println("This generally should not happen...");
System.exit(1);
}
//check if the hash in the file was valid for the line in question
try
{
if (Arrays.equals(hash, file_hash))
{
return true; //file hash is valid
}
else
{
throw new InvalidDataException(block_hash, 0);
}
}
catch (InvalidDataException ide)
{
System.err.println("InvalidDataException: " + ide);
ide.printStackTrace();
System.err.println("Quitting...");
return false;
}