जवाबों:
मुझे लगता है कि यह वही नहीं है जो आप पूछ रहे हैं, लेकिन पहिया को सुदृढ़ करने और बैश संस्करण लिखने का कोई मतलब नहीं है।
आप बस openssl
अपनी स्क्रिप्ट के भीतर हैश उत्पन्न करने के लिए कमांड का उपयोग कर सकते हैं ।
[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
या केवल:
[me@home] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
के -n
साथ उपयोग करने के लिए याद रखें echo
या फिर एक लाइन ब्रेक चरित्र को स्ट्रिंग में जोड़ा जाता है और जो आपके डेटा और हैश को बदल देता है।
यह कमांड ओपनएसएसएल पैकेज से आता है जिसे लिनक्स / यूनिक्स, साइगविन और पसंद की अपनी पसंद में पहले से स्थापित (या आसानी से स्थापित) होना चाहिए।
ध्यान दें कि पुराने संस्करण openssl
(जैसे कि RHEL4 के साथ शिप किए गए) -hmac
विकल्प प्रदान नहीं कर सकते हैं ।
एक वैकल्पिक समाधान के रूप में, लेकिन मुख्य रूप से यह साबित करने के लिए कि परिणाम समान हैं, हम PHP hmac_sha1()
को कमांड लाइन से भी कॉल कर सकते हैं :
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
sha1
इसे sha256
:-)
openssl genrsa
? इसके अलावा,
यहाँ एक बश फ़ंक्शन है जो hash_hmac
PHP से काम करता है :
#!/bin/bash
function hash_hmac {
digest="$1"
data="$2"
key="$3"
shift 3
echo -n "$data" | openssl dgst "-$digest" -hmac "$key" "$@"
}
# 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"
hash_hmac "sha1" "$(cat your-json-file)" "key"
। वैकल्पिक रूप से आप openssl dgst
इस hash_hmac
फ़ंक्शन का उपयोग किए बिना केवल अपनी फ़ाइल को पाइप कर सकते हैं ।
Hash_hmac फ़ंक्शन के लिए धन्यवाद! लेकिन यह मेरे आवेदन के लिए पर्याप्त नहीं था। यदि किसी को आश्चर्य होता है, तो मुझे एक कुंजी का उपयोग करके कई बार सामान को फिर से हैश करना पड़ता है जो पिछले हैशिंग का परिणाम था, और इसलिए एक बाइनरी इनपुट है। (अमेज़ॅन AWS प्रमाणीकरण हस्ताक्षर इस तरह बनाया गया है)
तो मुझे जिस चीज की जरूरत थी, वह द्विआधारी कुंजी को किसी तरह से आपूर्ति करने का एक तरीका था जो कि एल्गोरिथ्म को नहीं तोड़ता। तब मुझे यह मिला: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
स्टीफन हेंसन के जवाब को हेक्स प्रारूप में मूल्य वापस करने के लिए hash_hmac फ़ंक्शन की आवश्यकता होती है। तो यह निम्नलिखित गूंज की जरूरत है:
$ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //'
फिर अगली कॉल को कुंजी को हेक्सिट के रूप में प्रदान करना होगा:
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
उम्मीद है कि यह किसी को भी मदद करता है, शायद कोई ऐसा व्यक्ति जो एडब्ल्यूएस पर क्लाउडफ्रंट प्रविष्टियों को अमान्य करने के लिए बैश स्क्रिप्ट बनाने की कोशिश कर रहा है (मेरे जैसे!) (मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन मुझे लगता है कि यही वह चीज है जो मेरी बैश स्क्रिप्ट का कारण है। काम नहीं करता है, और मेरे PHP एक करता है ...)
उन लोगों के लिए जो कमांड लाइन पर अधिक JWT का पता लगाना पसंद करते हैं: कूल jwt bash script