Удалить хэш из конца файла

#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 .