#java #file #hash
#java #файл #хэш
Вопрос:
Я работаю с файлами txt, png, jpeg, pdf. И я добавляю хэш файла в конце, но когда я проверяю подпись, мне приходится удалять эту часть, но я не могу преобразовать все байты в строку, потому что эти разные файлы имеют разную кодировку…
Итак, есть ли какой-нибудь способ скопировать байты в другой файл, пока я не дойду до последней части, которая имеет такую форму «Хэш #» хэш документа в байтах..
Я использовал приведенный ниже код, но он работает только для текстовых файлов.. Потому что, когда я пишу temp.getBytes() В документе PNG, КОТОРЫЙ ОТЛИЧАЕТСЯ от ТЕХ БАЙТОВ, которые используются для создания этой временной строки, разные файлы имеют разную кодировку..
while ((count2 = inputStream.read(buffer)) != -1) {
String temp = new String(buffer);
if(temp.contains("Algoritam#")){...
Комментарии:
1. Хэш должен иметь фиксированную длину, поэтому просто отрежьте соответствующее количество байтов?
2. Просьбы никогда не преобразуют двоичные данные в строку , как вы это делаете
new String(buffer)
. Двоичные данные естьbyte[]
и должны оставаться таковыми. Преобразуйте его в строку только в том случае, если вы на 100% уверены, что данные содержат удобочитаемые строковые данные. Кроме того, добавление данных в конец файлов может привести к уничтожению файла, так что он больше не может быть прочитан, если вы не удалите добавленные данные. Хэши обычно хранятся в отдельном файле, так как вы можете создать его, например, с помощьюsha256sum
.3. На самом деле мне приходится использовать разные алгоритмы для хеширования, поэтому длина не всегда будет одинаковой…
Ответ №1:
Вы просто считываете содержимое файла в байтовый буфер размером sizeOfYourFile - sizeOfTheHash
.