มีสคริปต์ทุบตีเพื่อสร้างHMAC-SHA1
แฮชหรือไม่?
ฉันกำลังมองหาสิ่งที่เทียบเท่ากับโค้ด PHP ต่อไปนี้:
hash_hmac("sha1", "value", "key");
มีสคริปต์ทุบตีเพื่อสร้างHMAC-SHA1
แฮชหรือไม่?
ฉันกำลังมองหาสิ่งที่เทียบเท่ากับโค้ด PHP ต่อไปนี้:
hash_hmac("sha1", "value", "key");
คำตอบ:
ฉันตระหนักดีว่านี่ไม่ใช่สิ่งที่คุณต้องการ แต่ก็ไม่มีประโยชน์ในการคิดค้นล้อใหม่และเขียนเวอร์ชันทุบตี
คุณสามารถใช้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 ซึ่งควรติดตั้งไว้แล้ว (หรือติดตั้งได้ง่าย) ใน Linux / Unix, Cygwin และสิ่งที่คุณชอบ
โปรดทราบว่าเวอร์ชันเก่ากว่าopenssl
(เช่นที่มาพร้อมกับ RHEL4) อาจไม่มี-hmac
ตัวเลือกให้
ในฐานะที่เป็นทางเลือกอื่น แต่เพื่อพิสูจน์ว่าผลลัพธ์เหมือนกันเป็นหลักเราสามารถเรียก PHP hmac_sha1()
จากบรรทัดคำสั่ง:
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
sha1
ถูกแทนที่ด้วยsha256
:-)
openssl genrsa
หรือไม่? นอกจากนี้ลิงก์เอกสาร openssl ยังส่งผลให้เกิด 404
นี่คือฟังก์ชั่นทุบตีที่ใช้งานได้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! แต่มันไม่เพียงพอสำหรับการสมัครของฉัน ในกรณีที่ใครสงสัยฉันต้องแฮชซ้ำหลาย ๆ ครั้งโดยใช้คีย์ที่เป็นผลมาจากการแฮชก่อนหน้านี้ดังนั้นจึงเป็นการป้อนข้อมูลไบนารี (ลายเซ็นการตรวจสอบสิทธิ์ Amazon AWS ถูกสร้างขึ้นเช่นนี้)
ดังนั้นสิ่งที่ฉันต้องการคือวิธีจัดหาคีย์ไบนารีในบางวิธีที่จะไม่ทำลายอัลกอริทึม จากนั้นฉันพบสิ่งนี้: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
การตอบกลับของ Stephen Henson ต้องการฟังก์ชัน 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/^.* //'
หวังว่าสิ่งนี้จะช่วยทุกคนอาจเป็นคนที่พยายามสร้างสคริปต์ทุบตีเพื่อทำให้รายการ CloudFront เป็นโมฆะบน AWS (เช่นฉัน!) (ฉันยังไม่ได้ทดสอบ แต่ฉันคิดว่านี่เป็นสาเหตุที่ทำให้สคริปต์ทุบตีของฉัน ใช้งานไม่ได้และ PHP ของฉันทำ ... )
การติดตั้ง node.js คุณสามารถใช้เครื่องมือHMAC-CLI :
npx hmac-cli generate 'value' -h sha1 -s key
ผลตอบแทน:
57443a4c052350a44638835d64fd66822f813319
สำหรับผู้ที่ต้องการสำรวจ JWT เพิ่มเติมในบรรทัดคำสั่ง: cool jwt bash script