回答:
これはあなたが求めているものとは正確には違いますが、ホイールを再発明して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
オプションを提供できない場合があることに注意してください。
代替ソリューションとして、主に結果が同じであることを証明するためにhmac_sha1()
、コマンドラインからPHPを呼び出すこともできます。
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
sha1
に置き換えられますsha256
:-)
openssl genrsa
か?404でまた、OpenSSLの文書リンク結果
hash_hmac
PHPのように機能する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 "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関数が16進形式で値を返す必要があります。したがって、以下をエコーする必要があります。
$ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //'
次に、次の呼び出しでは、hexitとしてキーを提供する必要があります。
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
うまくいけば、これが誰でも、おそらくAWSのCloudFrontエントリを無効にするbashスクリプトを作成しようとしている人(私のように!)を助けます(私はまだそれをテストしていませんが、これが私のbashスクリプトの原因であると思います動作しません、そして私のPHPは動作します...)
コマンドラインでさらにJWTを探索したい方へ: クールなjwt bashスクリプト