Oluşturmak için bir bash betiği var mı HMAC-SHA1
karma?
Aşağıdaki PHP koduna eşdeğer bir şey arıyorum:
hash_hmac("sha1", "value", "key");
Oluşturmak için bir bash betiği var mı HMAC-SHA1
karma?
Aşağıdaki PHP koduna eşdeğer bir şey arıyorum:
hash_hmac("sha1", "value", "key");
Bunun tam olarak istediğin şey olmadığını anlıyorum, ama tekerleği yeniden icat etmek ve bir bash versiyonunu yazmanın bir anlamı yok.
Sadece kullanabilirsiniz openssl
komut dosyası içinde karma oluşturmak için komut.
[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Ya da sadece:
[me@home] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Kullanmayı unutma -n
ile echo
veya başka bir satır sonu karakteri dizeye eklenir ve bu da verilerinizi ve karma değerini değiştirir.
Bu komut, Linux / Unix, Cygwin ve beğenilerinizde zaten kurulu olan (veya kolayca kurulabilen) OpenSSL paketinden geliyor.
Eski sürümleri unutmayın openssl
(RHEL4 ile gönderilenler gibi) -hmac
seçeneği.
Alternatif bir çözüm olarak, ancak sonuçların aynı olduğunu kanıtlamak için PHP’yi de hmac_sha1()
komut satırından:
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
İşte böyle çalışan bir bash işlevi hash_hmac
PHP'den:
#!/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 işlevi için teşekkürler! Ama başvurum için yeterli değildi. Birisinin merak ettiği durumda, bir önceki karmaşanın sonucu olan bir anahtar kullanarak birkaç kez yeniden karmak zorunda kaldım ve bu yüzden ikili bir girdi. (Amazon AWS kimlik doğrulama imzası bu şekilde oluşturulur.)
Yani ihtiyacım olan şey, ikili anahtarı, algoritmayı bozmayacak şekilde tedarik etmenin bir yoluydu. Sonra bunu buldum: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
Stephen Henson'un cevabı, değeri hex biçiminde döndürmek için hash_hmac işlevini gerektirir. Yani aşağıdakileri yankılanması gerekiyor:
$ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //'
Ardından, sonraki çağrının anahtarı bir hexit olarak sağlaması gerekir:
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
Umarım bu, herkese, muhtemelen AWS'de CloudFront girişlerini geçersiz kılmak için bash betikleri oluşturmaya çalışan birisine yardımcı olur (benim gibi!) (Henüz test etmedim, ama bence bu benim bash scriptimin nedeninin sebebi) çalışmıyor ve benim PHP'im ...)
Komut satırında daha fazla JWT keşfetmek isteyenler için: serin jwt bash komut dosyası