A função Argon2id faz a aplicação do algoritmo Argon2id sobre o texto e parâmetros recebidos e retorna, em formato de binário bruto, o hash digest gerado.

Sintaxe

Argon2id( < cText >, < cSalt >, [ nMemoryCost ], [ nIterations ], [ nThreads ], [ nHashLen ], [ nLanes ] )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

cText

character

Texto(senha) em formato plaintext que será utilizada para gerar o Hash Digest via Argon2id.

X


cSalt

character

Texto que será utilizado pelo algoritmo para geração do hash. Garante que, se dois usuários tiverem a mesma senha, seus hashes finais sejam completamente diferentes no banco de dados (isso se o Salt de ambos também for diferente).

X


nMemoryCost

numeric

Define a quantidade de memória RAM (em Kibibytes) que o algoritmo é obrigado a usar. Valor padrão = 65536



nIterations

numeric

Define o número de passagens (iterações) que o algoritmo faz sobre a memória alocada. Valor padrão = 2



nThreads

numeric

Define o número de núcleos (threads) do processador que trabalharão simultaneamente para calcular o hash. Sempre deve ser menor que o parâmetro nLanes. Valor padrão = 2



nHashLen

numeric

Define o tamanho final do hash gerado (o retorno da função). Valor padrão = 128



nLanes

numeric

Define em quantas partes a memória do Argon2id é dividida para processamento paralelo. Sempre deve ser maior que o parâmetro nThreads. Valor padrão = nThreads



Retorno

Em caso de sucesso, retorna o hash digest gerado no tamanho do nHashLen definido na chamada da função.

Em caso de falha, retorna uma string vazia ("").

Importante

Observações

Cenário exemplo de utilização para hashing de senhas:

Registro: Durante o cadastro da senha, o hash digest gerado pelo função Argon2id deve ser convertido para um formato textual seguro (preferencialmente Hexadecimal ou Base64) e armazenado no banco de dados junto ao Salt e aos demais parâmetros.

Autenticação: Para validar um acesso, o sistema recupera o Salt e os parâmetros do banco, gera um novo hash a partir da senha fornecida pelo usuário e os compara. Se os hashes forem idênticos, a senha é considerada válida.

Exemplos

User Function ExemploArgon2id()
  Local argon2id_hash := ""
  
  Local cPassword := "123456"
  Local cSalt := "saltsalt"
  Local nMemoryCost := 65536
  Local nIterations := 2
  Local nThreads := 2
  Local nHashLen := 128
  Local nLanes := 2

  argon2id_hash := Argon2id(cPassword, cSalt, nMemoryCost, nIterations, nThreads, nHashLen, nLanes)
  
  Local argon2id_hash_size := len(argon2id_hash)
  conout(cValToChar(argon2id_hash_size))

Return

Abrangência

26.3.0.0


Referências

RFC9106: https://www.rfc-editor.org/rfc/rfc9106.html