Árvore de páginas

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

Veja também

  • Sem rótulos