2011-09-02 16 views
67

HMAC-SHA1 हैश उत्पन्न करने के लिए कोई बैश स्क्रिप्ट है?एचएमएसी-एसएचए 1 बाश

मैं कुछ निम्नलिखित PHP कोड के बराबर की तलाश में हूँ:

hash_hmac("sha1", "value", "key"); 

उत्तर

135

मुझे पता है यह आपके लिए वास्तव में क्या कह रहे हैं नहीं है, लेकिन वहाँ पहिया पुनर्रचना और एक बैश लेखन का कोई मतलब नहीं है संस्करण।

आप बस openssl आदेश का उपयोग अपनी स्क्रिप्ट के भीतर हैश उत्पन्न करने के लिए कर सकते हैं।

[[email protected]] echo -n "value" | openssl dgst -sha1 -hmac "key" 
57443a4c052350a44638835d64fd66822f813319 

या बस:

[[email protected]] echo -n "value" | openssl sha1 -hmac "key" 
57443a4c052350a44638835d64fd66822f813319 

echo वरना एक लाइन ब्रेक चरित्र स्ट्रिंग में जोड़ा जाता है और है कि आपके डेटा और हैश में परिवर्तन के साथ -n उपयोग करना न भूलें।

कि आदेश OpenSSL पैकेज जो पहले से ही लिनक्स/यूनिक्स, Cygwin और पसंद के अपनी पसंद में स्थापित किया जाना चाहिए (या आसानी से स्थापित) से आता है।

ध्यान दें कि openssl (जैसे कि RHEL4 के साथ भेजा गया) के पुराने संस्करण -hmac विकल्प प्रदान नहीं कर सकते हैं।

[[email protected]]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php 
57443a4c052350a44638835d64fd66822f813319 
+0

ओपनएसएसएल कार्यान्वयन बहुत धीमी हैं।यदि आपको कभी-कभी ऐसा करने की ज़रूरत है तो यह ठीक है, लेकिन यदि आप भारी मात्रा में हैश की गणना करने की कोशिश कर रहे हैं, तो आप विभिन्न तरीकों की जांच करना चाहते हैं। – Marcin

+1

@ मार्सिन: क्या आप इसके साथ एक स्रोत उद्धृत कर सकते हैं? – sehe

+0

[जॉन द रिपर] (http://www.openwall.com/john/) सीपीयू कार्यान्वयन के लिए बहुत तेज़ है और यह ओपन सोर्स है। – Marcin

30

यहाँ एक पार्टी समारोह है कि hash_hmac की तरह काम करता है:


एक वैकल्पिक समाधान के रूप में है, लेकिन मुख्य रूप से साबित होता है कि परिणाम एक ही हैं, हम भी पीएचपी के hmac_sha1() कमांड लाइन से कॉल कर सकते हैं PHP से:

#!/bin/bash 

function hash_hmac { 
    digest="$1" 
    data="$2" 
    key="$3" 
    shift 3 
    echo -n "$data" | openssl dgst "-$digest" -hmac "$key" "[email protected]" 
} 

# hex output by default 
hash_hmac "sha1" "value" "key" 

# raw output by adding the "-binary" flag 
hash_hmac "sha1" "value" "key" -binary | base64 

# other algos also work 
hash_hmac "md5" "value" "key" 
+0

इसे लपेटने का यह एक अच्छा तरीका है। +1 –

+2

बाइनरी के लिए धन्यवाद :) – Manav

+0

+1 क्योंकि चयनित उत्तर के विपरीत, यह एक प्रश्न पूछा गया है। (हालांकि दोनों सहायक हैं।) –

2

हैश_हैम फ़ंक्शन के लिए धन्यवाद! लेकिन यह मेरे आवेदन के लिए पर्याप्त नहीं था। अगर किसी ने सोचा, तो मुझे पिछली हैशिंग के परिणामस्वरूप एक कुंजी का उपयोग करके कई बार फिर से हैश करना था, और इसलिए एक द्विआधारी इनपुट है। (अमेज़न एडब्ल्यूएस प्रमाणीकरण हस्ताक्षर इस तरह बनाया जाता है।)

मैं एक तरह से किसी तरह कि एल्गोरिथ्म तोड़ने नहीं होगा में द्विआधारी कुंजी आपूर्ति करने के लिए था तो क्या जरूरत है। तब मुझे यह मिला: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html

स्टीफन हेन्सन के उत्तर में हेक्स प्रारूप में मान वापस करने के लिए हैश_हैम फ़ंक्शन की आवश्यकता है। तो यह निम्नलिखित प्रतिध्वनित करने के लिए की जरूरत है:

$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //' 

उम्मीद है कि इस मदद करता है किसी को भी, शायद कोई है जो bash स्क्रिप्ट बनाने के लिए कोशिश कर रहा है:

$ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //' 

फिर अगली कॉल एक hexit के रूप में कुंजी प्रदान करने की आवश्यकता होगी AWS पर क्लाउडफ्रंट प्रविष्टियों को अमान्य करने के लिए (जैसे मुझे!) (मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन मुझे लगता है कि यह वह चीज है जिसका कारण है कि मेरी बैश स्क्रिप्ट काम नहीं करती है, और मेरा PHP एक करता है ...)

0

उन लोगों को जो कमांड लाइन पर अधिक जेडब्ल्यूटी का पता लगाना पसंद करते हैं: cool jwt bash script

संबंधित मुद्दे