MD5 не изменился?

263
user3598649

У меня есть 3 RAR-файла (все с тем же md5), и я использую этот код для изменения Md5:

@echo off setlocal enabledelayedexpansion set /A Counter=0   FOR %%1 in (*.rar) do (  set /A Counter= !Counter! + 1 COPY %%1+!Counter! echo !Counter!  )  pause 

Когда я запускаю файл .bat, он показывает 3 строки со значением: 1, 2, 3, но когда я проверяю md5 из 3 rar-файлов, они совпадают, хотя и были изменены. Зачем ? Что я не так сделал? Спасибо !

-1
Я не думаю, что вы что-то меняете, так как вы забыли добавить целевой файл в команде копирования, как написано [здесь] (http://ss64.com/nt/copy.html). Doktoro Reichard 9 лет назад 0
@DoktoroReichard Проблема не в этом: «Когда вы объединяете файлы, [и] вы опускаете * Destination *, файлы объединяются и сохраняются под именем первого файла в списке». [Источник] (http://technet.microsoft.com/en-us/library/cc771997.aspx) and31415 9 лет назад 0

2 ответа на вопрос

3
Marcks Thomas

Скорее всего, файлы. \ 1 ','. \ 2 'и'. \ 3 'не существуют. Команда copy copy archive.rar+1добавляет содержимое файла '1' в файл .rar. Если файл не существует, он рассматривается как пустой. Тем не менее, хэш изменяется, поскольку без флага / b команда также добавляет символ 0x1A. Поскольку все файлы, найденные с помощью (* .rar), были одинаковыми для начала, добавление одинаковых байтов к каждому приведет к трем одинаковым файлам .rar с одинаковым MD5.

Вы можете убедиться, что значения MD5 отличаются после запуска скрипта, создав файлы '. \ 1', '. \ 2' и т. Д. С различным содержимым. Если вы просто хотите добавить символы, вы можете использовать что-то вроде echo !Counter! >> %%1этого. Полученные файлы больше не будут действительными архивами rar, конечно. Для этого вам понадобится инструмент rar с интерфейсом командной строки.

На самом деле пользователь не говорит, что эти три файла идентичны, только что они имеют одинаковый хэш MD5. Конечно, если у него есть способ генерировать неидентичные файлы с тем же хешем MD5, он, вероятно, может опубликовать это. Scott 9 лет назад 0
1
and31415

Your batch script has some issues. What you're trying to do is to append a number to the end of the original files in order to change their MD5 hashes. However:

  • The plus sign (+) can only be used to combine multiple existing files.
  • You're dealing with binary files, so you need to use the /b parameter.

    /b directs the command interpreter to read the number of bytes specified by the file size in the directory. /b is the default value for copy, unless copy combines files.

    When /b precedes or follows a list of files on the command line, it applies to all listed files until copy encounters /a.

    Source: Copy

Basically you need to store the number you want to append in a temporary file, and then combine it with the original .rar archive. Here's a fixed, working version:

@echo off setlocal setlocal enabledelayedexpansion set tempFile=%temp%\%random%%random%.tmp set /a counter=0 for %%G in (*.rar) do ( set /a counter += 1 <nul set /p=!counter!>"%tempFile%" copy /b "%%~G"+"%tempFile%" >nul echo !counter! ) del "%tempFile%" 2>nul pause endlocal & exit /b 

Note Replace for with for /r if you want to recursively scan folders.

Further reading

Похожие вопросы