MD5は変更されていませんか?


-1

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ファイルを実行すると、値が1、2、3の3行が表示されますが、3つのrarファイルのmd5をチェックすると、それらは変更されていますが同じです。どうして ?私は何を間違えましたか?ありがとう!


ここに記載されているように、コピーコマンドで宛先ファイルを追加するのを忘れたため、何かを変更しているとは思わない。
ドクトロライチャード

@DoktoroReichardこれは実際の問題ではありません。「ファイルを結合するとき、そしてDestinationを省略すると、ファイルは結合され、リストの最初のファイルの名前で保存されます。」出典
and31415

回答:


3

ほとんどの場合、ファイル「。\ 1」、「。\ 2」、および「。\ 3」は存在しません。copyコマンドcopy archive.rar+1は、ファイル「1」の内容を.rarファイルに追加します。ファイルが存在しない場合、空であるかのように扱われます。それでも、ハッシュは変更されます。これは、 '/ b'フラグがない場合、コマンドは文字0x1Aも追加するためです。(* .rar)で見つかったすべてのファイルは元々同じであったため、すべてに同じバイトを追加すると、まったく同じMD5の3つのまったく同じ.rarファイルが作成されます。

スクリプトを実行した後、異なる内容のファイル「。\ 1」、「。\ 2」などを作成することにより、MD5値が異なることを確認できます。単に文字を追加したいだけなら、echo !Counter! >> %%1代わりに何かを使いたいかもしれません。もちろん、結果のファイルは有効なrarアーカイブではなくなります。そのためには、コマンドラインインターフェイスを備えたrarツールが必要になります。


実際、ユーザーは3つのファイルが同一であるとは言わず、同じMD5ハッシュを持っているというだけです。もちろん、同じMD5ハッシュを持つ同一でないファイルを生成する方法があれば、おそらくそれを公開することができます。
スコット

1

バッチスクリプトにはいくつかの問題があります。あなたがしようとしているのは、元のファイルの末尾に数字を追加して、MD5ハッシュを変更することです。しかしながら:

  • プラス記号(+)は、複数の既存のファイルを結合するためにのみ使用できます。
  • バイナリファイルを扱っているため、/bパラメーターを使用する必要があります。

    /bディレクトリ内のファイルサイズで指定されたバイト数を読み取るようにコマンドインタープリターに指示します。ファイルを結合しない限り、はの/bデフォルト値です。copycopy

    /bコマンドラインでファイルのリストの前または後にある場合、コピーが検出されるまで、リストされているすべてのファイルに適用されます/a

    ソース:コピー

基本的に、一時ファイルに追加する番号を保存し、元の.rarアーカイブと結合する必要があります。修正済みの作業バージョンは次のとおりです。

@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

フォルダーを再帰的にスキャンforするfor /r場合は、と置き換えます。

参考文献

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.