HMAC-SHA1
ハッシュを生成するbashスクリプトはありますか?
私は次のPHPコードに相当するものを探しています:
hash_hmac("sha1", "value", "key");
これはまさにあなたが求めているものではないことを理解していますが、車輪を再発明してbashバージョンを書くことに意味はありません。
openssl
コマンドを使用して、スクリプト内でハッシュを生成できます。
_[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
_
または単に:
_[me@home] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
_
_-n
_をecho
とともに使用することを忘れないでください。そうしないと、改行文字が文字列に追加され、データとハッシュが変更されます。
このコマンドは、選択したLinux/Unix、Cygwinなどにすでにインストールされている(または簡単にインストールされる)OpenSSLパッケージから取得されます。
古いバージョンのopenssl
(RHEL4に同梱されているものなど)は_-hmac
_オプションを提供しない場合があることに注意してください。
別の解決策として、主に結果が同じであることを証明するために、コマンドラインからPHPのhmac_sha1()
を呼び出すこともできます。
_[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
_
PHPのhash_hmac
のように機能するbash関数を次に示します。
#!/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関数をありがとう!しかし、私のアプリケーションには十分ではありませんでした。誰かが疑問に思った場合、以前のハッシュの結果であり、したがってバイナリ入力であるキーを使用して、何回かハッシュをやり直さなければなりませんでした。 (Amazon AWS認証署名はこのように作成されます。)
だから、私が必要としていたのは、アルゴリズムを壊さない方法でバイナリキーを提供する方法でした。それから私はこれを見つけました: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
Stephen Hensonの応答では、hash_hmac関数が値を16進形式で返す必要があります。そのため、以下をエコーする必要があります。
$ 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/^.* //'
うまくいけば、これは誰か、おそらくbashスクリプトを作成してAWSのCloudFrontエントリを無効にしようとしている人(私のようです!)(私はまだテストしていませんが、これが私のbashスクリプトの原因であると思う動作せず、私のPHP one ...)
コマンドラインでより多くのJWTを探索したい人へ: cool jwt bash script