टर्मिनल में सीधे स्ट्रिंग का एमडी 5 हैश कैसे प्राप्त करें?


189

मैं टर्मिनल से सीधे एक स्ट्रिंग का एमडी 5 हैश कैसे प्राप्त कर सकता हूं ?

उदाहरण के लिए, मुझे स्ट्रिंग abcdefgहैशेड चाहिए। वर्तमान में md5sum कमांड केवल इनपुट के रूप में एक फाइलनाम को स्वीकार करता है। मैं बस निम्नलिखित पंक्ति में प्रवेश करना चाहता हूं और सब कुछ के साथ किया जाना चाहिए।

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

मैं उसे कैसे प्राप्त कर सकता हूं?


2
md5 -s abcdefg
राईटिस

जवाबों:


252

आप भी कुछ इस तरह कह सकते हैं:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

यह मूल रूप से @enzotib द्वारा वर्णित के रूप में एक ही काम करता है, लेकिन शायद थोड़ा सरल है।


2
आप उदाहरण परिणाम को भी अपडेट करना चाहते हैं, जैसा कि 7803ffca ... जोड़ा गया नईलाइन के साथ परिणाम है । ऊपर दिए गए आदेश के लिए सही परिणाम है83218ac34c1834c26781fe4bde918ee4 -
ज़ैंथिर

19
अंत में स्पेस और डैश क्यों हैं?
keune

1
कृपया गलत होने पर मुझे सही करें, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि MD5sum को डेटा की एक धारा में लागू किया गया था, जैसा कि एक फ़ाइल सामग्री को पढ़ने के लिए विरोध किया गया था, जिसका नाम इससे जुड़ा हुआ है।
jfmessier

11
ध्यान दें कि -nयह अनिवार्य है। इसके बिना, आपका हैश पूरी तरह से गलत होगा क्योंकि इसमें न्यूलाइन वर्ण शामिल है।
पिथिकोस

1
मैं -अंत में कैसे नजरअंदाज कर सकता था । @jfmessier
alper

61

बहुत सरल, यह स्टड को स्वीकार करता है, इसलिए

md5sum <<<"my string"

शेल द्वारा जोड़े गए अनुगामी न्यूलाइन से बचने के लिए:

printf '%s' "my string" | md5sum

@Messier और @enzotib दोनों को वोट देना; दोनों मेरी बेशकीमती "सुरुचिपूर्ण सादगी" श्रेणी में आते हैं। मैं <<<"एक स्क्रिप्ट में पाइप का उपयोग करने के लिए उपयुक्त होगा ; echo stringकमांडलाइन के लिए जीत। बहुत बढ़िया।
टॉम

3
printfसही ढंग से उपयोग करने के लिए +1 । यदि आप के बिना योग करना चाहते हैं -, डाल दिया | cut -d ' ' -f 1। उदाहरण का उपयोग:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
लेकेनस्टीन

1
यह अजीब है, लेकिन <<<ऑपरेटर और printfफ़ंक्शन md5 हैश के लिए पूरी तरह से अलग परिणाम दे रहे हैं! प्रिंटफ का नतीजा हालांकि सही है!
हमीनी जूल

ऐसा लगता है कि <<<ऑपरेटर md5sum को एक नई लाइन भेजता है!
हम्मीर जूल

1
हाँ, यह करता है, जैसा कि मैंने पहले और दूसरे उदाहरण के बीच कहा है
enzotib

27
$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e

आप एक शेल स्क्रिप्ट बना सकते हैं।

उदाहरण के लिए, स्क्रिप्ट का नाम md5.sh है:

#!/bin/bash

echo   -n   $1 | md5sum | awk '{print $1}'

अनुमति निष्पादित:

 chmod +x md5.sh

फिर:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

अगर आपका सिस्टम macOS है। आपको इस स्क्रिप्ट को संशोधित करने की आवश्यकता है:

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e

1
यह अभी बहुत लंबा है।
गूचो सीए

1
cut -d ' ' -f 1
जागने का

मैंने md5() { echo -n $1 | md5sum | awk '{print $1}'; }.bashrc में एक फ़ंक्शन बनाया और फिर मैं $ md5 testकमांड लाइन में उपयोग कर सकता हूं । उत्तर के लिए धन्यवाद
रुबिन बेंजामिन

शॉर्टर awkकमांड:'$0=$1'
एलेक्स स्ट्रैगीज़

@AlexStragies yep
ty4z2008

10

Md5sum को बिना किसी तर्क के साथ चलाना टर्मिनल से इनपुट पढ़ने के लिए कारण होगा। जो आप चाहते हैं उसे टाइप या पेस्ट करें, और जब आप कर लें, ctrl-dतो इनपुट समाप्त करने के लिए दबाएं ।


1
हाँ, तुम भी सही हो। लेकिन ctrl+dइसे काम करने के लिए दो बार दबाने की जरूरत है।
ममेनी

@ नाम, अगर यह एक नई लाइन का पालन नहीं करता है, तो हाँ। यदि आप एंट्री मारने के बाद इसे मारते हैं, तो इसे केवल एक बार की जरूरत है। जब यह एक नई लाइन का पालन नहीं करता है, तो यह सिर्फ लाइन पर टाइप किए गए सभी वर्णों को मजबूर करता है कि वे एक नई लाइन की प्रतीक्षा करने के बजाय तुरंत संसाधित हो जाएं।
Psusi

10
openssl md5 filename
openssl sha1 filename

स्ट्रिंग पाइप के लिए इको का उपयोग करके सामग्री

echo -n 123456 | openssl md5

4

कमांड के --helpलिए मेरा त्वरित प्रहार md5sumदर्शाता है कि कमांड:

md5sum -

फिर सरल इनपुट के लिए संकेत देगा। कुछ पाठ इनपुट करना Enterऔर फिर फ़ाइल के अंत का संकेत देने के लिए फिर Ctrl+ का उपयोग करना और फिर आपके द्वारा दर्ज किए गए कच्चे पाठ के एमडी 5 को बाहर करने का Dकारण बनता md5sumहै (जिसमें Enterयह एक सीआर, आईआईआरसी है)।

टाइप करने के लिए कम और कोई पाइपिंग नहीं! और अपने सादे पासवर्ड को शेल हिस्ट्री में रिकॉर्ड करने से बचना चाहिए! लुभाने!

यदि आप नहीं चाहते हैं कि अनुगामी सीआर (सामान्यतः होता है अगर आप एक पासवर्ड हैश करने के लिए चाहते हैं), पर नहीं पहुंचते हैं Enterसे पहले Ctrl+ D, प्रवेश Ctrl+ Dदो बार के बजाय।


2

मेरी स्क्रिप्ट में मैंने पाया कि 2 चीजें हैं जो आपको इस मुद्दे के बारे में पता होनी चाहिए।

  • इससे कोई फर्क नहीं पड़ता कि आप करते हैं echo "$myvariable"या नहीं, echo -n "$myvariable" लेकिन आपको हमेशा स्ट्रिंग्स के लिए डबलकाउट्स का उपयोग करना चाहिए और हमेशा एक ही विधि का उपयोग करना चाहिए। अगर चीजें मेल नहीं खाती हैं।
  • आउटपुट में आपको हमेशा एक अनुगामी स्थान और एक डैश मिलता है जैसा कि उदाहरण में दिखाया गया है:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

उस से छुटकारा पाने के लिए और केवल कोड के साथ रहें 7803ffcaea43bb81a439fde13b29bc35, करें:echo "$myvariable" | md5sum | cut -d" " -f1


-nअनुगामी न्यूलाइन आउटपुट करने से बचने के लिए यहां पैरामीटर न भूलें , जिससे गलत md5 हो जाएगा:echo -n $myvariable | md5sum | cut -d" " -f1
derFunk

1

ऐसा करने के लिए कई उदाहरण हैं, लेकिन उनमें से कुछ समकक्ष नहीं हैं क्योंकि उनमें से कुछ स्पष्ट रूप से या अंतर्निहित रूप से नई पंक्ति में शामिल हैं, और कुछ अन्य नहीं हैं।

मैं स्पष्ट रूप से निर्दिष्ट करना चाहूंगा कि किस लोकप्रिय तरीके में न्यूलाइन शामिल है और जो नहीं हैं।

यहाँ कुछ उदाहरणों के साथ md5 हैश की गणना के बिना नई लाइन (सही) है:

पाठ के साथ फ़ाइल का उपयोग करना:

$ echo -n "test" > test.txt
$ wc test.txt
0 1 4 test.txt
$ md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt

नोट: -n का echoअर्थ है: "अनुगामी न्यूलाइन का उत्पादन न करें"।

इनलाइन के echoसाथ उपयोग करना -n:

$ echo -n "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

का उपयोग कर printf:

$ printf "%s" "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

केवल md5sumकमांड का उपयोग करना :

(चलो लिखने md5sum, प्रेस Enterतो स्ट्रिंग लिखने testऔर उसके बाद डबल संयोजन Ctrl+ d)

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -

md5sum -कमांड का उपयोग करना :

(चलो लिखने md5sum -, प्रेस Enterतो स्ट्रिंग लिखने testऔर उसके बाद डबल संयोजन Ctrl+ d)

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -

यहां कुछ उदाहरणों के साथ md5 हैश की अनुगामी न्यूलाइन (SO NOT CORRECT) के साथ गणना की गई है :

पाठ के साथ फ़ाइल का उपयोग करना:

$ echo "test" > test_n.txt
$ wc test_n.txt
1 1 5 test_n.txt
$ md5sum test_n.txt
d8e8fca2dc0f896fd7cb4cb0031ba249  test_n.txt

इनलाइन का उपयोग किए echoबिना -n:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

यहाँ तार का उपयोग करना :

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

पाठ लिखने के बाद केवल md5sumकमांड का उपयोग करनाEnter

(चलो लिखने md5sum, प्रेस Enterतो स्ट्रिंग लिखने testऔर फिर agaien प्रेस Enterऔर एक बार संयोजन Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

टेक्स्ट लिखने के बाद md5sum -कमांड का उपयोग करनाEnter

(चलो लिखने md5sum -, प्रेस Enterतो स्ट्रिंग लिखने testऔर फिर agaien प्रेस Enterऔर एक बार संयोजन Ctrl+ d)

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