MD5 wurde nicht geändert?

378
user3598649

Ich habe 3 rar-Dateien (alle mit dem gleichen MD5) und ich verwende diesen Code, um MD5 zu ändern:

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

Wenn ich die .bat-Datei starte, werden 3 Zeilen mit Wert angezeigt: 1, 2, 3, aber wenn ich MD5 von 3 rar-Dateien überprüfe, sind sie gleich, obwohl sie geändert wurden. Warum ? Was habe ich falsch gemacht? Vielen Dank !

-1
Ich glaube nicht, dass Sie etwas ändern, da Sie vergessen haben, eine Zieldatei im Kopierbefehl hinzuzufügen, wie hier [hier] (http://ss64.com/nt/copy.html) geschrieben. Doktoro Reichard vor 10 Jahren 0
@DoktoroReichard Das ist nicht das eigentliche Problem: "Wenn Sie Dateien kombinieren, [und] Sie * Ziel * weglassen, werden die Dateien unter dem Namen der ersten Datei in der Liste zusammengefasst und gespeichert." [Quelle] (http://technet.microsoft.com/de-de/library/cc771997.aspx) and31415 vor 9 Jahren 0

2 Antworten auf die Frage

3
Marcks Thomas

Höchstwahrscheinlich existieren die Dateien '. \ 1', '. \ 2' und '. \ 3' nicht. Der copy archive.rar+1Kopierbefehl hängt den Inhalt der Datei '1' an die .rar-Datei an. Wenn die Datei nicht vorhanden ist, wird sie so behandelt, als wäre sie leer. Der Hash ändert sich jedoch, da der Befehl ohne das '/ b'-Flag auch das Zeichen 0x1A anfügt. Da alle mit (* .rar) gefundenen Dateien zu Beginn identisch waren, führt das Hinzufügen derselben Bytes zu jedem Byte zu drei exakt gleichen .rar-Dateien mit exakt demselben MD5.

Sie können sicherstellen, dass sich die MD5-Werte nach der Ausführung des Skripts unterscheiden, indem Sie die Dateien '. \ 1', '. \ 2' usw. mit unterschiedlichem Inhalt erstellen. Wenn Sie die Zeichen einfach anfügen möchten, können Sie echo !Counter! >> %%1statt dessen etwas verwenden. Die resultierenden Dateien sind natürlich keine gültigen Rar-Archive mehr. Dafür benötigen Sie ein rar-Tool mit einer Befehlszeilenschnittstelle.

Eigentlich sagt der Benutzer nicht, dass die drei Dateien identisch sind, nur dass sie den gleichen MD5-Hash haben. Wenn er nicht in der Lage ist, nicht identische Dateien mit dem gleichen MD5-Hash zu generieren, könnte er dies wahrscheinlich veröffentlichen. Scott vor 10 Jahren 0
1
and31415

Ihr Batch-Skript weist einige Probleme auf. Sie versuchen, eine Nummer an das Ende der Originaldateien anzuhängen, um deren MD5-Hashwerte zu ändern. Jedoch:

  • Das Pluszeichen ( +) kann nur zum Kombinieren mehrerer vorhandener Dateien verwendet werden.
  • Sie haben es mit binären Dateien zu tun, daher müssen Sie den /bParameter verwenden.

    /bWeist den Befehlsinterpreter an, die durch die Dateigröße im Byte angegebene Anzahl von Bytes zu lesen. /bist der Standardwert für copy, sofern nicht copyDateien kombiniert werden.

    Wenn /bvor oder nach einer Liste von Dateien in der Befehlszeile vorgegangen wird, gilt sie für alle aufgelisteten Dateien, bis sie kopiert werden /a.

    Quelle: Kopieren

Grundsätzlich müssen Sie die Nummer, die Sie anhängen möchten, in einer temporären Datei speichern und diese dann mit dem Originalarchiv kombinieren .rar. Hier ist eine feste, funktionierende 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 

Hinweis Ersetzen formit, for /rwenn Sie Ordner rekursiv durchsuchen möchten.

Lesen Sie weiter