Existe um script bash para gerar um HMAC-SHA1
hash?
Estou procurando algo equivalente ao seguinte código PHP:
hash_hmac("sha1", "value", "key");
Sei que não é exatamente isso que você está pedindo, mas não adianta reinventar a roda e escrever uma versão do bash.
Você pode simplesmente usar o openssl
comando para gerar o hash em seu script.
[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Ou simplesmente:
[me@home] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Lembre-se de usar -n
com, echo
ou então, um caractere de quebra de linha é anexado à string e isso altera seus dados e o hash.
Esse comando vem do pacote OpenSSL que já deve estar instalado (ou facilmente instalado) em sua escolha de Linux / Unix, Cygwin e similares.
Observe que as versões mais antigas do openssl
(como a fornecida com o RHEL4) podem não oferecer a -hmac
opção.
Como solução alternativa, mas principalmente para provar que os resultados são os mesmos, também podemos chamar PHP's hmac_sha1()
da linha de comando:
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
sha1
foi substituída porsha256
:-)openssl genrsa
? Além disso, o link de documentação do openssl resulta em um 404.Aqui está uma função bash que funciona como
hash_hmac
PHP:fonte
hash_hmac "sha1" "$(cat your-json-file)" "key"
. Como alternativa, você pode simplesmente canalizar seu arquivoopenssl dgst
sem usar estahash_hmac
função.Obrigado pela função hash_hmac! Mas não foi o suficiente para minha aplicação. Caso alguém esteja se perguntando, eu tive que refazer o hash várias vezes usando uma chave que era o resultado do hash anterior e, portanto, é uma entrada binária. (A assinatura de autenticação Amazon AWS é criada assim.)
Então, o que eu precisava era uma maneira de fornecer a chave binária de alguma forma que não quebrasse o algoritmo. Então eu encontrei isto: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
A resposta de Stephen Henson requer que a função hash_hmac retorne o valor em formato hexadecimal. Portanto, ele precisa ecoar o seguinte:
Então, a próxima chamada precisaria fornecer a chave como um hexit:
Espero que isso ajude alguém, provavelmente alguém que está tentando criar scripts bash para invalidar entradas do CloudFront no AWS (como eu!) (Eu não testei ainda, mas acho que é isso que é a causa de porque meu script bash não funciona, e meu PHP funciona ...)
fonte
Para aqueles que gostam de explorar mais JWT na linha de comando: cool jwt bash script
fonte