चेकसम उत्पन्न करने के लिए संभावित कमांड
दुर्भाग्य से, क्रिप्टोग्राफिक चेकसम उत्पन्न करने के लिए कोई मानक उपयोगिता नहीं है। सीआरसी उत्पन्न करने के लिए एक मानक उपयोगिता है cksum
:; यह गैर-शत्रुतापूर्ण वातावरण में परिवर्तनों का पता लगाने के आपके उद्देश्य के लिए पर्याप्त हो सकता है।
मैं MD5 के बजाय SHA1 का उपयोग करने की सलाह दूंगा। ऐसी कई प्रणालियाँ नहीं हैं जिनके पास MD5 उपयोगिता है, लेकिन कोई SHA1 नहीं है, और यदि आप क्रिप्टोग्राफ़िक चेकसम का उपयोग करने जा रहे हैं, तो आप टकरावों को खोजने के लिए कोई ज्ञात विधि के साथ एक एल्गोरिथ्म का उपयोग कर सकते हैं (यह मानकर कि आप आकार की जाँच भी करते हैं)।
एक उपकरण जो मानक नहीं है, लेकिन आम है और यह पचा सकता है कि ओपनएसएसएल है । यह साइगविन, डेबियन और ओएसएक्स के लिए उपलब्ध है, लेकिन दुर्भाग्य से ओएसएक्स पर डिफ़ॉल्ट स्थापना का हिस्सा नहीं है।
openssl dgst -sha1
OSX 10.6 पर, एक shasum
उपयोगिता है, जो डेबियन पर भी मौजूद है (यह perl
पैकेज का हिस्सा है ) और मुझे सिओविन पर भी विश्वास है। यह एक पर्ल स्क्रिप्ट है। अधिकांश यूनिक्स सिस्टम में पर्ल स्थापित है, इसलिए यदि आप इस स्क्रिप्ट के साथ उस स्क्रिप्ट को बंडल कर सकते हैं, यदि आप इस स्क्रिप्ट के बारे में चिंतित हैं तो हर जगह उपलब्ध नहीं है।
अपने सिस्टम के लिए सही कमांड का चयन करना
ठीक है, मान लें कि आप वास्तव में एक कमांड नहीं पा सकते हैं जो हर जगह काम करता है।
खोल में
type
कमांड उपलब्ध है या नहीं यह देखने के लिए अंतर्निहित का उपयोग करें ।
sum=
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do
if type "${x%% *}" >/dev/null 2>/dev/null; then sum=$x; break; fi
done
if [ -z "$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
$sum *.org
जीएनयू बनाते हैं
जब मेकफाइल लोड किया जाता है और आउटपुट को एक चर में संग्रहित किया जाता है, तो आप शेल स्निपेट को चलाने के लिए shell
फ़ंक्शन का उपयोग कर सकते हैं ।
sum := $(shell { command -v sha1sum || command -v sha1 || command -v shasum; } 2>/dev/null)
%.sum: %
$(sum) $< >$@
पोर्टेबल (POSIX) बनाते हैं
आप केवल शेल कमांड को नियम में चला सकते हैं, इसलिए चेकसम की गणना करने वाले प्रत्येक नियम में लुकअप कोड शामिल होता है। आप स्निपेट को एक चर में रख सकते हैं। याद रखें कि नियमों में अलग-अलग रेखाओं का मूल्यांकन स्वतंत्र रूप से किया जाता है। यह भी याद रखें कि $
जिन संकेतों को शेल को पारित किया जाना है, उनसे बचने की आवश्यकता है $$
।
determine_sum = \
sum=; \
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do \
if type "$${x%% *}" >/dev/null 2>/dev/null; then sum=$$x; break; fi; \
done; \
if [ -z "$$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
checksums.dat: FORCE
$(determine_sum); \
$$sum *.org
autotools