[bash] Bash의 HMAC-SHA1

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옵션을 제공하지 않을 수 있습니다.


대체 솔루션이지만 주로 결과가 동일하다는 것을 증명하기 위해 hmac_sha1()명령 줄에서 PHP를 호출 할 수도 있습니다 .

[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319


답변

다음은 hash_hmacPHP에서 와 같이 작동하는 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의 응답에는 값을 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


답변