ব্যাশে HMAC-SHA1


97

HMAC-SHA1হ্যাশ তৈরির জন্য কি কোনও বাশ স্ক্রিপ্ট রয়েছে ?

আমি নিম্নলিখিত পিএইচপি কোডের সমতুল্য কিছু খুঁজছি:

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

উত্তর:


191

আমি বুঝতে পেরেছিলাম যে এটি আপনি যা চেয়েছিলেন ঠিক তা নয়, তবে চাকাটি পুনর্নবীকরণ এবং ব্যাশ সংস্করণ লেখার কোনও অর্থ নেই।

আপনি 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(যেমন আরএইচইএল 4 সহ প্রেরিত) -hmacবিকল্প সরবরাহ করতে পারে না ।


বিকল্প সমাধান হিসাবে, তবে প্রধানত ফলাফলগুলি একই প্রমাণ করার জন্য আমরা পিএইচপি'র hmac_sha1()সাথে কমান্ড লাইন থেকে কল করতে পারি :

[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319

ওপেনএসএসএল বাস্তবায়নগুলি খুব ধীর। আপনার যদি মাঝে মাঝে এটি করার দরকার হয় তবে তা ঠিক আছে তবে আপনি যদি প্রচুর পরিমাণে হ্যাশ গণনা করার চেষ্টা করছেন তবে আপনি বিভিন্ন উপায় অনুসন্ধান করতে চান।
মার্সিন

4
@ মার্সিন: আপনি কি এর সাথে একটি উত্স উদ্ধৃত করতে পারেন?
sehe

6
আমার HMAC-SHA256 এর সাথে একই প্রশ্ন ছিল। একই সমাধান, তবে :-)sha1sha256
মোগসি

4
হ্যাঁ আপনি পারেন তবে আপনার ফাইলের মধ্যে লাইনব্রেকগুলি লক্ষ্য রাখুন কারণ এটিকে মানটির অংশ হিসাবেও বিবেচনা করা হবে।
শন চিন

4
@ শ্যাওনচিন, এই উদাহরণে কীটির এনকোডিং / ফর্ম্যাট কী? প্রাইভেট কী ব্যবহার করে তৈরি করা কি এটি বেস 64 এনকোডিং হওয়া উচিত openssl genrsa? এছাড়াও, 404. মধ্যে OpenSSL ডকুমেন্টেশন লিংক ফলাফল
কার্লোস Macasaet

41

এখানে একটি বাশ ফাংশন যা hash_hmacপিএইচপি থেকে শুরু করে:

#!/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"

এটি মোড়ানো একটি দুর্দান্ত উপায়। +1
শন চিন

+1 কারণ নির্বাচিত উত্তরের বিপরীতে, এটির জিজ্ঞাসিত প্রশ্নের উত্তর দেয়। (যদিও উভয়ই সহায়ক))
অ্যালেক্সেক্স রোচে

তবে, কীভাবে আপনি 'ডেটা' যুক্তিটি স্ক্রিপ্টে পাস করবেন যদি এটি মাল্টি লাইন হয়? কোনও এক্সএমএল বা জসন বডির মতো ইন্ডেন্টেশনটি না ছাড়াই।
HyperioN

@HyperioN আপনি একটি ফাইল আপনার JSON তথ্য আছে যদি আপনি কেবল এই কাজ করতে পারে: hash_hmac "sha1" "$(cat your-json-file)" "key"। বিকল্পভাবে আপনি openssl dgstএই hash_hmacফাংশনটি ব্যবহার না করে কেবল আপনার ফাইলটি পাইপ করতে পারেন ।
মার্টিন

-বাইনারি বিটের জন্য আপনাকে ধন্যবাদ। এটি ছিল আমার জন্য অনুপস্থিত অংশ
g ই

9

Hash_hmac ফাংশন জন্য ধন্যবাদ! তবে এটি আমার আবেদনের পক্ষে যথেষ্ট ছিল না। যদি কেউ অবাক হয়ে যায়, আমাকে আগের বারের হ্যাশিংয়ের ফলস্বরূপ একটি কী ব্যবহার করে বেশ কয়েকবার পুনরায় হ্যাশ করতে হয়েছিল এবং তাই এটি বাইনারি ইনপুট। (অ্যামাজন এডাব্লুএস প্রমাণীকরণের স্বাক্ষরটি তৈরি করা হয়েছে))

সুতরাং আমার যা দরকার তা ছিল বাইনারি কী সরবরাহ করার একটি উপায় যা কোনওভাবে অ্যালগরিদমকে ভঙ্গ করবে না। তারপরে আমি এটি পেয়েছি: 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/^.* //'

আশা করি এটি যে কাউকে সহায়তা করবে, সম্ভবত এমন কেউ যারা আডাব্লুএসে ক্লাউডফ্রন্ট এন্ট্রিগুলি অকার্যকর করতে বাশ স্ক্রিপ্টগুলি তৈরি করার চেষ্টা করছে (আমার মতো!) (আমি এখনও এটি পরীক্ষা করি নি, তবে আমি মনে করি এটিই আমার বাশ স্ক্রিপ্টের কারণ) কাজ করে না, এবং আমার পিএইচপি একটি ...)


0

নোড.জেএস ইনস্টল করে আপনি HMAC-CLI সরঞ্জামটি ব্যবহার করতে পারেন :

npx hmac-cli generate 'value' -h sha1 -s key

ফেরত:

57443a4c052350a44638835d64fd66822f813319

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.