Как редактировать файлы, чтобы изменить хэш md5 без повреждения? - PullRequest
1 голос
/ 17 января 2012

Мне нужно продублировать различные типы файлов, немного их изменить, чтобы хэш оригинала md5 не совпадал с модифицированным, но оставлял их читаемыми и не поврежденными.

TXT-файлы - это очевидно,Я просто добавляю случайную строку в конец файла.

PDF-файл - ну, я начал искать библиотеку Java для редактирования PDF-файлов, но затем я случайно попытался открыть PDF-файл в Notepad ++ и подумал- почему бы мне не попытаться добавить случайную строку в конец нечитаемого контента, который я там вижу.Ну, к моему удивлению, это сработало, и файл не был поврежден.

ZIP-файл - я пробовал то же самое, что и с pdf, и он тоже работал.

DOCX-тот же метод перестал работать здесь.Добавление только пробела ("") в конце двоичного содержимого файла docx, который я открываю в текстовом редакторе, повреждает файл.

Итак, мне нужно:

  1. java-библиотеки для изменения офисных документов: doc, docx, xls, xlsx, ppt, pptx.

  2. Есть еще типы файлов, которые мне нужно изменить, там вывод хеша md5, но я не думаю, что они могут быть изменены в java-медиа-файлах, например, исполняемых файлах и т. д. Итак, тем не менее, как я могу выполнить то, что я хочу над этими файлами?Есть ли способ просто «прикоснуться» к файлу, изменить заголовок или что-то и сделать его неидентичным нетронутому?

edit: Хорошо, вот мотивация - я хочу создатьОгромное количество данных, как я здесь спросил: Как получить огромное количество данных?

На момент ответа на этот вопрос я получил достаточно, но их нет.

  1. Мне нужны данные, чтобы они не были идентичными.Пары файлов должны пройти хэш-тест md5.

  2. Я не могу просто генерировать случайные строки, потому что мне нужно моделировать реальные файлы и документы.

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

Поэтому я решил, что мне следует использовать начальный набор данных всех типов файлов, которые мне в конечном итоге понадобятся, и просто продублировать этот набор данных.

1 Ответ

2 голосов
/ 17 января 2012
  1. Java-библиотеки для изменения офисных документов: doc, docx, xls, xlsx, ppt, pptx.

Apache POI используется для изменения файлов MS Office. Обратите внимание, что новые форматы (xlsx, docx и т. Д.) Представляют собой просто ZIP-файлы, содержащие XML. Распаковка и изменение обычного текста XML может также работать.

То же самое относится и к ZIP-файлам: попробуйте разархивировать и изменить файл Самый простой .

Но чего вы на самом деле пытаетесь достичь? Обратите внимание, что случайное присоединение какой-либо строки в конце файла работает только случайно. На другом компьютере или другой версии программного обеспечения файл может считаться поврежденным ...

Я бы посоветовал вам хранить метаданные, внешние по отношению к файлу, а не сравнивать MD5, или углубиться в форматы файлов. Почти всегда в файле скрыты заголовки и различные фрагменты метаданных (теги ID3 в MP3, EXIF ​​в изображениях и т. Д.). Вместо этого гораздо безопаснее изменить его.

Также ищите зарезервированные / неиспользуемые байты - это довольно часто. Но опять же - почему? Вы делаете это на первом месте?

...