O HMAC também é chamado de hash com chave. Portanto, você só pode gerar o mesmo hash durante a verificação se tiver a mesma chave usada durante a geração de assinatura. O resultado do MAC é chamado de autenticação tag .
O HMAC é uma construção especial que usa duas chamadas para o hash - no seu caso SHA-256 - que é usado internamente, e não usa nenhuma outra primitivas criptográficas . Por conseguinte, pode ser visto como um modo específico do próprio hash. Daí a inclusão em dgst .
Faltando o seu código estão os dados chave, que é obviamente necessário para criar um hash com chave. Isso deve ser apresentado após -hmac
. Infelizmente openssl
requer um formato binário da chave. Para mais informações, consulte esta conversa antiga na lista de discussão do OpenSSL .
EDIT # 1: cavando um pouco mais fundo, se você quiser especificar a chave como hexadecimals você poderia usar uma linha como esta:
echo -n "Hello world!" | openssl dgst -sha256 -mac hmac -macopt hexkey:01020304
A saída da função é a saída da segunda execução do hash, portanto, é indistinguível de apenas SHA-256, se você apenas olhar para o tamanho do resultado hash / HMAC. É claro que o conteúdo será completamente diferente de apenas hashing dos dados (ou chave e dados concatenados).
EDIT # 2: No entanto, você não especificou uma chave, então, na verdade, o HMAC é ignorado e o SHA-256 é usado. Isso foi sinalizado como um bug, consulte aqui