HMAC-SHA1
Karma oluşturmak için bir bash betiği var mı ?
Aşağıdaki PHP koduna eşdeğer bir şey arıyorum:
hash_hmac("sha1", "value", "key");
Yanıtlar:
Bunun tam olarak istediğiniz şey olmadığının farkındayım, ancak tekerleği yeniden icat etmenin ve bir bash versiyonu yazmanın bir anlamı yok.
openssl
Komut dosyanızın içinde hash oluşturmak için komutu kullanabilirsiniz .
[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ı unutmayın -n
ile echo
ya da başka bir satır sonu karakter dizesinin eklenen ve bu veri ve karma değiştirir edilir.
Bu komut, Linux / Unix, Cygwin ve benzerlerini seçtiğinizde zaten kurulmuş (veya kolayca yüklenmesi) gereken OpenSSL paketinden gelir.
openssl
Ürünün eski sürümlerinin (RHEL4 ile birlikte gönderilenler gibi) bu -hmac
seçeneği sağlamayabileceğini unutmayın .
Alternatif bir çözüm olarak, ancak esas olarak sonuçların aynı olduğunu kanıtlamak için, PHP'leri hmac_sha1()
komut satırından da çağırabiliriz :
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
sha1
yerine sha256
:-)
openssl genrsa
? Ayrıca, openssl dokümantasyon bağlantısı bir 404 ile sonuçlanır.
İşte hash_hmac
PHP'deki gibi çalışan bir bash işlevi :
#!/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"
. Alternatif olarak, openssl dgst
bu hash_hmac
işlevi kullanmadan dosyanızı aktarabilirsiniz .
Hash_hmac işlevi için teşekkürler! Ancak başvurum için yeterli olmadı. Birinin merak etmesi durumunda, önceki hashing işleminin sonucu olan ve bu nedenle bir ikili giriş olan bir anahtarı kullanarak birkaç kez yeniden hash işlemi yapmak zorunda kaldım. (Amazon AWS kimlik doğrulama imzası bu şekilde oluşturulur.)
Dolayısıyla ihtiyacım olan şey, ikili anahtarı algoritmayı bozmayacak şekilde sağlamanın bir yoluydu. Sonra şunu buldum: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
Stephen Henson'ın cevabı hash_hmac fonksiyonunun değeri onaltılık formatta döndürmesini gerektirir. Bu nedenle aşağıdakileri yansıtması gerekir:
$ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //'
Ardından bir sonraki çağrıda anahtarı hexit olarak sağlamanız gerekir:
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
Umarım bu herkese yardımcı olur, muhtemelen AWS'de CloudFront girişlerini geçersiz kılmak için bash betikleri oluşturmaya çalışan biri (benim gibi!) (Henüz test etmedim, ancak bence bash betiğimin nedeni budur. çalışmıyor ve benim PHP'im çalışıyor ...)
Komut satırında daha fazla JWT keşfetmek isteyenler için: harika jwt bash betiği