#java #digest #message-digest
#java #дайджест #дайджест сообщений
Вопрос:
Раньше я не знал об этом MessageDigest
классе. Сейчас я пытаюсь понять фрагмент кода, и документация мне не очень помогает.
MessageDigest digest = Crypto.sha256();
digest.update(last.getSign());
byte[] SignHash = digest.digest(publicKey);
Согласно документации java:
«update» Обновляет это
MessageDigest
, используя заданныйbyte[]
«digest» Выполняет окончательное обновление, а затем вычисляет и возвращает окончательное значение хэша для этого MessageDigest.
Вопрос 1: Что на самом деле означает «обновления с использованием данного байта []»?
Вопрос 2. Каково окончательное обновление, выполняемое «дайджестом»?
Означает ли вышесказанное SignHash=sha256(last.getSign()
concat (некоторое заполнение открытого ключа))?
Ответ №1:
Представьте класс MessageDigest так, как будто его обновление на самом деле добавляет больше байтов во внутренний буфер. Теперь, когда вы закончите, вы используете метод digest для создания хэша всех байтов, добавленных в буфер.
Именование может показаться немного странным (я, конечно, думаю, что «appendBytes» и «createHash» /»createDigest» были бы лучше), но подумайте об экземпляре MessageDigest, внутреннее состояние которого вы обновляете большим количеством байтов, пока, наконец, не сгенерируете дайджест.
Комментарии:
1. Итак, при обновлении (last.getSign()) байты знака добавляются во внутренний буфер, пока все хорошо. Вопрос 1 понятен. В чем смысл входного параметра digest? Например, в чем возможная разница между вызовом digest() и digest(bytes[]) для одного и того же объекта?
2. Первый вариант завершает вычисление хэша, второй вариант выполняет последнее обновление заданных байтов, затем завершает вычисление хэша (своего рода сокращение).