BashスクリプトでHMAC-SHA512ダイジェストを計算したいのですが。これまでのところ、これは多くの異なるサイトで何度も繰り返されることがわかりました。
echo -n message | openssl dgst -sha256 -hmac secret -binary >message.mac
シークレットはシステムで実行されている他のすべてのプロセスのプロセスリストに表示されるため、これは誰にもプログラムにシークレット文字列を渡す適切な方法ではないことを認識しているようです。シークレットを渡すための優れたインターフェイスを備えたシェルでHMACを簡単に作成する他の方法(おそらく他のツールを使用)はありますか?
[〜#〜]更新[〜#〜]
私は次のツール(~/bin/hmac
)今。 MACKEY
環境変数からキーを取得します。
#!/usr/bin/env python3
import hmac, sys, os
key = os.environ['MACKEY'].encode('utf-8')
algo = os.getenv('MACALGO', 'sha512')
digest = hmac.new(key, digestmod = algo)
while True:
buf = sys.stdin.buffer.read(512)
if not buf:
break
digest.update(buf)
print(digest.hexdigest())
使用法:
echo -n message | MACKEY=foobar hmac
リダイレクトは引数リストの一部ではありません。
これは、psスヌーピングから安全であると見なされます。
cmd </file/key
cmd <<<"key"
名前のないパイプもスクリプト内で可能です
echo "secret" | cmd
したがって、このスクリプトは安全であると見なされます。
#!/bin/bash
read secretkey </dev/stdin
var="<?= hash_hmac(\"sha512\", \"$1\", \"$secretkey\"); ?>"
php7.1 <<<"$var"
</dev/stdin
は</dir/keyfile
キーをファイルに保存できる場合。
stdin
バージョンの場合は、次のように使用します。
./script "Message" <<<"secretkey"