답변:
나는 이것이 당신이 요구하는 것이 아니라는 것을 알고 있지만 바퀴를 재발 명하고 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의 응답에는 값을 16 진수 형식으로 반환하기 위해 hash_hmac 함수가 필요합니다. 따라서 다음을 반영해야합니다.
$ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //'
그런 다음 다음 호출에서 키를 16 진수로 제공해야합니다.
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
바라건대 이것은 AWS에서 CloudFront 항목을 무효화하기 위해 bash 스크립트를 생성하려는 사람 (예 : 나처럼!) (아직 테스트하지 않았지만 이것이 내 bash 스크립트의 원인이라고 생각합니다. 작동하지 않고 내 PHP는 작동합니다 ...)
명령 줄에서 더 많은 JWT를 탐색하려는 사람들에게 : cool jwt bash script