HMAC (Hash-based Message Authentication Code) gera o hash de autenticação de uma mensagem de entrada, em combinação com uma chave secreta. Essa implementação suporta os algoritmos SHA-1,SHA-256,SHA-512 e MD5.
Sintaxe
HMAC( < cContent >, < cKey >, < nCryptoType >, [ nRetType ], [ nContentType ], [ nKeyType ] )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
cContent | caractere | Indica a string de entrada que contém os dados para os quais será gerado o hash. | X | |
cKey | caractere | Indica a chave que será utilizada para gerar o hash. | X | |
nCryptoType | numérico | Indica o tipo de algoritmo criptográfico que será utilizado para geração do Hash. Veja tabela nas observações. | X | |
nRetType | numérico | Indica o tipo do formato de retorno do hash. Quando não informado valor padrão será 2 (Hex Hash). Veja tabela nas observações. | ||
nContentType | numérico | Indica o tipo do formato do conteúdo da variável cContent. Quando não informado o padrão será 1 (Texto). Veja tabela nas observações. | ||
nKeyType | numérico | Indica o tipo do formato da chave informada na variável cKey. Quando não informado o padrão será 1 (Texto). Veja tabela nas observações. |
Retorno
Nome | Tipo | Descrição |
---|---|---|
cDigest | caractere | Retorna o hash (Message Authentication Code) do conteúdo de entrada informado, no formato especificado. |
Observações
- A geração de um hash (Message Authentication Code) normalmente é utilizada para verificar se o conteúdo é originário de uma fonte confiável, por exemplo, uma empresa que sofre com atacantes que inserem pedidos fraudulentos pela Internet podem solicitar que todos os seus clientes forneçam uma chave secreta com ele. Junto com um pedido, um cliente deve fornecer o resumo do HMAC do pedido, computado por meio da chave simétrica do cliente. A empresa, que conhece a chave simétrica do cliente, pode então verificar que o pedido se originou a partir do cliente indicado e não foi adulterado.
Tipo de algoritmo válido para o parâmetro nCryptoType:
Valor
Algoritmo
1
MD5
3
SHA1
5
SHA256
7
SHA512
Tipos de Outputs para o parâmetro nRetType:
Valor
Formato
1
Raw Hash
2
Hex Hash (Default)
Tipos de inputs para o parâmetro nContentType:
Valor
Formato
1
Texto
2
Base 64
3
Hexadecimal
Tipos de inputs para o parâmetro nKeyType:
Valor
Formato
1
Texto
2
Base 64
3
Hexadecimal
- Caso algum erro ocorra durante a geração do hash uma mensagem de erro será gerada no log no servidor e o hash de saída será vazio.
Exemplos
User Function tstHMAC() Local cInput := "0123456789abcdefghijklmnopqrstuvxz" Local cKeyHx := "c8783fc0963838abc662c920c82e94cf" Local nCpSHA256 := 5 Local cHashHex := "" Local cHashRaw := "" cHashHex := HMAC( cInput, cKeyHx, nCpSHA256, 2, 1, 3 ) Varinfo( "Input ", cInput ) Varinfo( "HMAC-SHA256 Hex", sHashHex ) cHashRaw := HMAC( cInput, cKeyHx, nCpSHA256, 1, 1, 3 ) Varinfo( "HMAC-SHA256 Raw", sHashRaw ) Return User Function HmacBase64() local cInput64 := Encode64( "secret text" ) local cKey64 := Encode64( "d key used" ) local nSha1Type := 3 local nTypeBase64 := 2 local nOutPutType := 1 local ret := "" ret := HMAC( cInput64, cKey64, nSha1Type, nOutPutType, nTypeBase64, nTypeBase64 ) Varinfo( "cInput64 ", cInput64 ) Varinfo( "ret ", ret ) Return User Function HmacHex() local cInput := "secret text" local cInputHex := "7365637265742074657874" local cKey := "d key used" local cKeyHex := "64206b65792075736564" local nSha1Type := 3 local nTypeHex := 3 local nOutPutType := 1 local ret := "" ret := HMAC( cInputHex, cKeyHex, nSha1Type, nOutPutType, nTypeHex, nTypeHex ) Varinfo( "cInputHex ", cInputHex ) Varinfo( "ret ", ret ) Return
Abrangência
AppServer 13.1.4.0 e 13.2.4.0 | nContetType e nKeyType disponíveis a partir da versão 17.3.0.18