Hash

Descubra mais sobre o componente Hash e saiba como utilizá-lo na Digibee Integration Platform.

O Hash gera um hash a partir de uma string.

Parâmetros

Dê uma olhada nos parâmetros de configuração do componente. Parâmetros suportados por expressões Double Braces estão marcados com (DB).

Parâmetro
Descrição
Valor padrão
Tipo de dado

Crypto Operation

Tipos de operação disponíveis (Hash Fields, Hash Payload e Hash File).

Hash Fields

String

File name

Nome ou caminho completo do arquivo (i.e. tmp/processed/file.txt). Este campo fica disponível somente quando Hash File estiver selecionado no parâmetro Crypto Operation e suporta somente MD5 Crypto Algorithm.

N/A

String

Crypto Algorithm

Tipo de algoritmo utilizado para gerar o hash. Os possíveis valores para esse parâmetro são MD5, SHA-1, SHA-256, SHA-384, SHA-512, HmacSHA1, HmacSHA256, HmacSHA384, HmacSHA512 e BCrypt.

SHA-512

String

Account

Só será exibida caso o algoritmo selecionado no campo Crypto Algorithm seja HmacSHA1, HmacSHA256, HmacSHA384 ou HmacSHA512. A conta deve ser do tipo SECRET_KEY e a chave para fazer o hash deve ser informada.

N/A

String

Secret Key (DB)

Só será exibida se nenhuma conta estiver selecionada e caso o algoritmo selecionado no campo Crypto Algorithm seja HmacSHA1, HmacSHA256, HmacSHA384 ou HmacSHA512. Essa é uma alternativa para o componente receber a chave para a geração do hash de forma dinâmica.

N/A

String

Secret Key Type

Só será exibido caso o algoritmo selecionado no campo Crypto Algorithm seja HmacSHA1, HmacSHA256, HmacSHA384 ou HmacSHA512. Esse campo também informa para o componente qual é o tipo da chave informada, que pode ser do tipo String, Hexadecimal ou base64.

Hexadecimal

String

Charset

Charset do tipo da chave informada. Este campo fica disponível somente quando o valor do parâmetro Secret Key Type for String.

UTF-8

String

BCrypt Version

Versão do algoritmo BCrypt a ser considerada na geração do hash. Essa opção será disponibilizada apenas quando o valor do parâmetro Crypto Algorithm for BCrypt.

2y

N/A

Salt

String de 16 bytes adicionada ao valor do hash. Caso não seja informado, será assumido um valor aleatório. Essa opção será disponibilizada apenas quando o valor do parâmetro Crypto Algorithm for BCrypt.

N/A

String

Cost Factor

Determina a quantidade de rodadas para o hash ser executado. O fator de custo será elevado à potência de 2 e os possíveis valores estão entre 4 e 20. Ex: se o valor do parâmetro for 10, então a quantidade de rodadas para o hash será 2ˆ10 = 1024 rodadas. Essa opção será disponibilizada apenas quando o valor do parâmetro Crypto Algorithm for BCrypt. Veja mais na seção abaixo.

0

Inteiro

JSON Field Path

JSON como caminho do campo string em notação com pontos (dotted notation).

xml.text

String

Payload

Campo para informar diretamente o payload que terá o hash feito. Ele será exibido apenas se a operação selecionada for Hash Payload.

N/A

String

Preserve Original

Se ativada, a opção preserva o campo original como propriedade "Field" no mesmo nível do original.

True

Booleano

Result As Hexadecimal

Se ativada, a opção mantém o hash em formato hexadecimal; do contrário, o formato será base64.

True

Booleano

Fail On Error

Se a opção estiver habilitada, a execução do pipeline com erro será interrompida; do contrário, a execução do pipeline continua, mas o resultado vai mostrar um valor falso para a propriedade "success".

False

Booleano

Importante: o componente gera um hash a partir de uma string passada no campo Payload caso a operação selecionada seja Hash Payload. No entanto, se a operação selecionada for Hash Fields, então o componente gera um hash a partir de uma string passada nos campos especificados do JSON de entrada.

Fator de custo

O fator de custo no algoritmo BCrypt afeta exponencialmente o tempo e os recursos de processamento, pois o algoritmo será executado consecutivamente de acordo com o número de rodadas obtidas através do resultado do cálculo 2^n, no qual "n" é o fator de custo.

Veja alguns exemplos de execução para servir de parâmetro de duração do cálculo do hash. Como premissa para aplicar o hash do algoritmo BCrypt estão sendo utilizados um payload de 1MB e um fator de custo com o mínimo e o máximo permitido. Os resultados obtidos são:

Cost Factor 4

  • Pipeline Small: média de 0.98s

  • Pipeline Medium: média de 0.64s

  • Pipeline Large: média de 0.07s

Cost Factor 20

  • Pipeline Small: média de 8m 7s

  • Pipeline Medium: média de 3m 56s

  • Pipeline Large: média de 1m 53s

Os resultados acima podem variar de acordo com o fluxo de integração construído, com o tamanho da mensagem a ter o hash aplicado e com o fator de custo.

Outro ponto importante a ser destacado diz respeito aos limites do fator de custo. O fator de custo do algoritmo BCrypt permite uma faixa entre 4 e 31. No entanto, fatores acima de 20 acabam consumindo carga de processamento e tempo muito alto, inviabilizando os parâmetros de timeout de execução de um pipeline.

Com isso, o componente Hash foi limitado a aceitar no máximo 20 como valor de fator de custo. Partindo dessa premissa, quando for realizado o hash de um valor por meio do componente Hash e com a utilização do algoritmo BCrypt, atente-se ao limite de 20 como fator de custo. Dessa forma são evitados problemas de validação ou checagem no seu fluxo de integração.

Fluxo de mensagens

Entrada

Se você selecionar a operação Hash Fields, o componente recebe qualquer mensagem de entrada, mas você deve configurar o caminho para o hash da mensagem na propriedade JSON Field Path. Por exemplo:

JSON Field Path: data.test

{
"data": [
{"test":"xpto"},
{"test":"xpto1"},
{"test":"xpto2"},
{"test":"xpto3"}
]
}

Portanto, o componente faz uma busca na propriedade “test”, dentro da propriedade “data”.

Por outro lado, se você selecionar a operação Hash Payload, então a mensagem de entrada deve ser informada dentro do campo Payload.

Saída

Operação Hash Fields

Se você selecionar a operação Hash Fields, a saída contém a mesma estrutura de entrada, porém exibindo o hash da mensagem. Se a propriedade Preserve Original estiver habilitada, então a saída preserva o campo original no mesmo nível, adicionando o prefixo '_' na frente do campo:

{
"data": [
{
"test": "3851b1ae73ca0ca6e3c24a0256a80ace",
"_test": "xpto"
},
{
"test": "ca9e9bf198149d78f4aad334c838a263",
"_test": "xpto1"
},
{
"test": "83709b4f9067a83bbdfb0c358dc23a5e",
"_test": "xpto2"
},
{
"test": "e427f7e6f1bd29d91ea0cc53e40fba12",
"_test": "xpto3"
}
]
}

Operação Hash Payload

Se você selecionar a operação Hash Payload, a saída exibe a propriedade "result" com o hash da mensagem passada:

{
"result": "3851b1ae73ca0ca6e3c24a0256a80ace"
}

Erro

{
"success": false,
"message": "Something went wrong while trying to use the HashConnector. Error: java.lang.StringIndexOutOfBoundsException: String index out of range: 1",
"error": "java.lang.StringIndexOutOfBoundsException: String index out of range: 1"
}
  • success: “false”, pois ocorreu um erro na execução.

  • message: mensagem de erro do componente.

  • error: mensagem de erro recebida do algoritmo de hash.

Hash em Ação

Operação Hash Fields

Exemplo 1

  • Crypto Operation: Hash Fields

  • Crypto Algorithm: SHA-256

  • JSON Field Path: data.test

  • Preserve Original: ativado

  • Result As Hexadecimal: ativado

Entrada

{
"data": [
{"test":"xpto"},
{"test":"xpto1"},
{"test":"xpto2"},
{"test":"xpto3"}
]
}

Saída

{
"data": [
{
"test": "2e954593b0b51547656f7f06ec3818a2b42fed46307b81bd493133aa1ce45173",
"_test": "xpto"
},
{
"test": "8b948d95169f851545f8161fb4dc8e1d37a4c79014ac1d02186fa8946a91aab9",
"_test": "xpto1"
},
{
"test": "4c9e0d7ca22d9ab7cc675de59226f9477fd847ede13894b835d0ae204139f63a",
"_test": "xpto2"
},
{
"test": "b5bd5abe3eb5958153af6615df06ccbdfe5857a13da2601f49e4de9fbb102f9a",
"_test": "xpto3"
}
]
}

Exemplo 2

  • Crypto Operation: Hash Fields

  • Crypto Algorithm: HmacSHA256

  • Account: vazio

  • Secret Key: 001def0209

  • Secret Key Type: Hexadecimal (a chave passada na propriedade Secret Key deve estar em hexadecimal)

  • JSON Field Path: data.test

  • Preserve Original: ativado

  • Result As Hexadecimal: ativado

Entrada

{
"data": [
{"test":"xpto"},
{"test":"xpto1"},
{"test":"xpto2"},
{"test":"xpto3"}
]
}

Saída

{
"data": [
{
"test": "257966929b29a6e0618d47a152e2856a888072400a5cb458fa1d40ff3cedc734",
"_test": "xpto"
},
{
"test": "ce0e754ab2f57f1fca1a00fce3e834a6940bea8013ae59b6641a4911e349b480",
"_test": "xpto1"
},
{
"test": "ff0cd9c0df219f99567aeb25d7d5ab9acff3c29728b0f4f71f50e750750a26d5",
"_test": "xpto2"
},
{
"test": "04a11cbc118ea455c0072e6c70607f68324e5444c8a4795443d25933d9dfa9c6",
"_test": "xpto3"
}
]
}

Exemplo 3

  • Crypto Operation: Hash Fields

  • Crypto Algorithm: BCrypt

  • Bcrypt Version: 2y

  • Salt: N9qo8uLOickgx2ZM

  • Cost: 6

  • JSON Field Path: data.test

  • Preserve Original: ativado

Entrada

{
"data": [
{"test":"xpto"},
{"test":"xpto1"},
{"test":"xpto2"},
{"test":"xpto3"}
]
}

Saída

{
"data": [
{
"test": "$2y$06$RhjvZxfzRC7nW0rlcBHYROhJmATBMG6eXfkYkffexdfdFHzzp27Iu",
"_test": "xpto"
},
{
"test": "$2y$06$RhjvZxfzRC7nW0rlcBHYROm9TaJZ6QQUstIomnJG/Qgc7fPU5x8S.",
"_test": "xpto1"
},
{
"test": "$2y$06$RhjvZxfzRC7nW0rlcBHYROHAP1dIbNu3SenuQ6B.W9OkJ0/NzYF6e",
"_test": "xpto2"
},
{
"test": "$2y$06$RhjvZxfzRC7nW0rlcBHYROPsXkmxUVt8Suo8d3GuOl9q0pryw6iJy",
"_test": "xpto3"
}
]
}

Operação Hash Payload

Exemplo 1

  • Crypto Operation: Hash Payload

  • Crypto Algorithm: SHA-256

  • Payload: xpto

  • Result As Hexadecimal: ativado

Saída

{
"result": "2e954593b0b51547656f7f06ec3818a2b42fed46307b81bd493133aa1ce45173"
}

Exemplo 2

  • Crypto Operation: Hash Payload

  • Crypto Algorithm: HmacSHA512

  • Account: vazio

  • Secret Key: 001def0209

  • Secret Key Type: Hexadecimal (a chave passada na propriedade Secret Key deve estar em hexadecimal)

  • Payload: xpto

  • Result As Hexadecimal: ativado

Saída

{
"result": "517da9449385a43478309459adf9304bd3c8f63cd1d388abd5cbc02b81d8ccb39d303f877019aebfed073166e6c410197e10077f6df3f7a3b3f50adb8cd09580"
}

Exemplo 3

  • Crypto Operation: Hash Payload

  • Crypto Algorithm: BCrypt

  • Bcrypt Version: 2b

  • Salt: N9qo8uLOickgx2ZM

  • Cost: 10

  • Payload: {{ message.data }}

Entrada

{
"data": [
{"test":"xpto"},
{"test":"xpto1"},
{"test":"xpto2"},
{"test":"xpto3"}
]
}

Saída

{
"result": "$2b$10$RhjvZxfzRC7nW0rlcBHYROa3UXROXVeKZ3oK4DSc1mV6iJ/pBqBm6"
}

Atualizado