MD5 नहीं बदला गया था?


-1

मेरे पास 3 आरएआर फाइलें हैं (सभी एक ही 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 लेकिन जब मैं 3 rar फ़ाइलों के md5 की जांच करता हूं, तो वे समान होते हैं, हालांकि उन्हें बदल दिया गया था। क्यों ? मैंने क्या गलत किया? धन्यवाद !


मुझे नहीं लगता कि आप कुछ भी बदल रहे हैं, जैसा कि आप कॉपी कमांड में एक गंतव्य फ़ाइल जोड़ना भूल गए, जैसा कि यहां लिखा गया है
डॉकटोरो रीचर्ड

@DoktoroReichard यह वास्तविक मुद्दा नहीं है: "जब आप फ़ाइलों को जोड़ते हैं, [और] आप गंतव्य को छोड़ देते हैं , तो फ़ाइलें संयुक्त और सूची में पहली फ़ाइल के नाम से संग्रहीत होती हैं।" स्रोत
31415

जवाबों:


3

सबसे अधिक संभावना है, फ़ाइलें '। \ 1', '। \ 2' और '। 3' मौजूद नहीं हैं। प्रतिलिपि आदेश copy archive.rar+1.rar फ़ाइल में फ़ाइल '1' की सामग्री को जोड़ता है। यदि फ़ाइल मौजूद नहीं है, तो यह माना जाता है कि यह खाली थी। हैश फिर भी बदलता है क्योंकि '/ b' ध्वज के बिना, कमांड वर्ण 0x1A को भी जोड़ता है। चूँकि (* .rar) के साथ पाई जाने वाली सभी फाइलें उसी के साथ शुरू होने के लिए समान थीं, हर एक के लिए एक ही बाइट को जोड़ने से तीन समान .rar फ़ाइलों में समान MD5 के साथ परिणाम होगा।

आप फ़ाइलों को बनाकर स्क्रिप्ट चलाने के बाद MD5 मान अलग-अलग हैं। यदि आप केवल पात्रों को जोड़ना चाहते हैं, तो आप echo !Counter! >> %%1इसके बजाय कुछ का उपयोग करना चाह सकते हैं । परिणामस्वरूप फ़ाइलें अब निश्चित रूप से मान्य आरए अभिलेखागार नहीं होंगी। उसके लिए, आपको कमांड लाइन इंटरफ़ेस के साथ एक rar टूल की आवश्यकता होगी।


दरअसल, उपयोगकर्ता यह नहीं कहता है कि तीन फाइलें समान हैं, केवल यह कि उनके पास एमडी 5 हैश है। बेशक, अगर उसके पास समान MD5 हैश के साथ गैर-समान फ़ाइलों को बनाने का एक तरीका है, तो वह संभवतः प्रकाशित हो सकता है।
स्कॉट

1

आपके बैच की स्क्रिप्ट में कुछ समस्याएं हैं। आप क्या करने की कोशिश कर रहे हैं ताकि अपने एमडी 5 हैश को बदलने के लिए मूल फाइलों के अंत में एक नंबर संलग्न किया जा सके। हालाँकि:

  • प्लस साइन ( +) का उपयोग केवल कई मौजूदा फ़ाइलों को संयोजित करने के लिए किया जा सकता है।
  • आप बाइनरी फ़ाइलों के साथ काम कर रहे हैं, इसलिए आपको /bपैरामीटर का उपयोग करने की आवश्यकता है ।

    /bनिर्देशिका में फ़ाइल आकार द्वारा निर्दिष्ट बाइट्स की संख्या को पढ़ने के लिए कमांड दुभाषिया को निर्देश देता है। जब तक फ़ाइलों को संयोजित नहीं /bकिया जाता है copy, तब तक डिफ़ॉल्ट मान होता है copy

    जब /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अगर आप रिकर्सिवली फ़ोल्डरों स्कैन करना चाहते हैं।

आगे की पढाई

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.