MD5 não foi alterado?

-1

Eu tenho 3 arquivos rar (todos com o mesmo md5), e eu uso este código para mudar o 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

Quando eu executo o arquivo .bat, ele mostra 3 linhas com valor: 1, 2, 3, mas quando eu verifico o md5 de 3 arquivos rar, eles são iguais, embora tenham sido alterados. Por quê ? O que eu fiz de errado? Obrigado!

    
por user3598649 03.05.2014 / 12:05

2 respostas

3

Provavelmente, os arquivos '. \ 1', '. \ 2' e '. \ 3' não existem. O comando de cópia copy archive.rar+1 acrescenta o conteúdo do arquivo '1' ao arquivo .rar. Se o arquivo não existir, ele será tratado como se estivesse vazio. O hash muda, no entanto, porque sem o sinalizador '/ b', o comando também acrescenta o caractere 0x1A. Como todos os arquivos encontrados com (* .rar) foram os mesmos para começar, adicionar os mesmos bytes a cada um resultará em exatamente três arquivos .rar com exatamente o mesmo MD5.

Você pode garantir que os valores MD5 sejam diferentes depois de executar o script, criando os arquivos '. \ 1', '. \ 2' etc. com diferentes conteúdos. Se você simplesmente deseja anexar os caracteres, talvez queira usar algo como echo !Counter! >> %%1 . Os arquivos resultantes não serão mais arquivos rar válidos, é claro. Para isso, você precisará de uma ferramenta rar com uma interface de linha de comando.

    
por 03.05.2014 / 12:42
1

Seu script em lote tem alguns problemas. O que você está tentando fazer é acrescentar um número ao final dos arquivos originais para alterar seus hashes MD5. No entanto:

  • O sinal de mais ( + ) só pode ser usado para combinar vários arquivos existentes.
  • Você está lidando com arquivos binários, então você precisa usar o parâmetro /b .

    /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

Basicamente, você precisa armazenar o número que deseja anexar em um arquivo temporário e, em seguida, combiná-lo com o arquivo .rar original. Aqui está uma versão fixa e funcional:

@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

Observação Substitua for por for /r se você quiser examinar as pastas de maneira recursiva.

Leitura adicional

por 07.05.2014 / 13:02