# Hash

O conector **Hash** permite gerar valores de hash a partir de diferentes tipos de entrada. Dependendo do seu caso de uso, é possível gerar o hash de **campos específicos**, **arquivos** ou do **payload completo**.

Cada opção possui seu próprio conjunto de parâmetros, mas todas seguem a mesma lógica básica: selecionar a **operação**, definir o **algoritmo de hash** e ajustar parâmetros adicionais conforme necessário.

## **Parâmetros**

Os parâmetros de configuração são organizados em abas: **General** e **Documentation**.

* A aba **General** contém todos os campos usados para configurar o conector. Inclui parâmetros que estão sempre visíveis, além daqueles que aparecem dinamicamente de acordo com a **Crypto Operation** selecionada (por exemplo, `Hash Fields`, `Hash File` ou `Hash Payload`) ou com o **Crypto Algorithm** (por exemplo, `HmacSHA256` ou `BCrypt`).
* A aba **Documentation** fornece um campo opcional onde você pode descrever a configuração do conector e adicionar regras de negócio ou observações relevantes.

Os campos que aceitam [expressões Double Braces](/documentation/connectors-and-triggers/pt-br/double-braces/overview.md) são marcados na coluna **Suporta DB**.

{% tabs fullWidth="true" %}
{% tab title="General" %}

#### **Parâmetros comuns**

Esses parâmetros são sempre exibidos, independentemente da operação selecionada.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo de dado</th><th>Suporta DB</th><th>Valor padrão</th></tr></thead><tbody><tr><td><strong>Alias</strong></td><td>Nome (alias) para a saída deste conector, permitindo referenciá-la posteriormente no fluxo usando expressões Double Braces. <a href="/pages/3qLsJwXf8erdLiaooiFB">Saiba mais</a>.</td><td>String</td><td>❌</td><td><code>hash-1</code></td></tr><tr><td><strong>Crypto Operation</strong></td><td>Tipo de operação a ser realizada. Valores possíveis: <code>Hash Fields</code>, <code>Hash Payload</code> ou <code>Hash File</code>.</td><td>Seleção</td><td>❌</td><td><code>Hash Fields</code></td></tr><tr><td><strong>Crypto Algorithm</strong></td><td>Tipo de algoritmo usado para gerar o hash. Valores possíveis: <code>MD5</code>, <code>SHA-1</code>, <code>SHA-256</code>, <code>SHA-384</code>, <code>SHA-512</code>, <code>HmacSHA1</code>, <code>HmacSHA256</code>, <code>HmacSHA384</code>, <code>HmacSHA512</code> e <code>BCrypt</code>.</td><td>Seleção</td><td>❌</td><td><code>SHA-512</code></td></tr><tr><td><strong>Result As Hexadecimal</strong></td><td>Quando habilitado, mantém o hash no formato hexadecimal; caso contrário, o formato será base64.</td><td>Booleano</td><td>❌</td><td><code>true</code></td></tr><tr><td><strong>Fail On Error</strong></td><td>Quando habilitado, interrompe a execução do pipeline se ocorrer um erro. Quando desabilitado, a execução continua, mas a propriedade <code>"success"</code> será definida como <code>false</code>.</td><td>Booleano</td><td>❌</td><td><code>false</code></td></tr></tbody></table>

#### **Hash Fields**

Esses parâmetros são exibidos apenas quando a **Crypto Operation** está definida como `Hash Fields`.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo de dado</th><th>Suporta DB</th><th>Valor padrão</th></tr></thead><tbody><tr><td><strong>JSON Field Path</strong></td><td>Caminho do campo string no JSON, em notação pontuada.</td><td>String</td><td>✅</td><td><code>xml.text</code></td></tr><tr><td><strong>Preserve Original</strong></td><td>Quando ativado, preserva o campo original como uma propriedade <code>"Field"</code> no mesmo nível do campo original.</td><td>Booleano</td><td>❌</td><td><code>true</code></td></tr></tbody></table>

#### **Hash File**

Esses parâmetros são exibidos apenas quando a **Crypto Operation** está definida como `Hash File`.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo de dado</th><th>Suporta DB</th><th>Valor padrão</th></tr></thead><tbody><tr><td><strong>File Name</strong></td><td>Nome do arquivo ou caminho completo (por exemplo, <code>tmp/processed/file.txt</code>).</td><td>String</td><td>✅</td><td>N/A</td></tr></tbody></table>

#### **Hash Payload**

Esses parâmetros são exibidos apenas quando a **Crypto Operation** está definida como `Hash Payload`.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo de dado</th><th>Suporta DB</th><th>Valor padrão</th></tr></thead><tbody><tr><td><strong>Payload</strong></td><td>Campo usado para informar diretamente o payload que será convertido em hash.</td><td>String</td><td>✅</td><td>N/A</td></tr></tbody></table>

#### **Configuração baseada no algoritmo**

Esses parâmetros dependem do **Crypto Algorithm** selecionado.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo de dado</th><th>Suporta DB</th><th>Valor padrão</th></tr></thead><tbody><tr><td><strong>Account</strong></td><td>Exibido apenas quando o <strong>Crypto Algorithm</strong> é um dos seguintes: <code>HmacSHA1</code>, <code>HmacSHA256</code>, <code>HmacSHA384</code> ou <code>HmacSHA512</code>. A conta deve ser do tipo <strong>Secret Key</strong>, e a chave para o hash deve ser informada.</td><td>String</td><td>❌</td><td>N/A</td></tr><tr><td><strong>Secret Key</strong> <code>(DB)</code></td><td>Exibido apenas se nenhuma conta for selecionada e o <strong>Crypto Algorithm</strong> for um dos seguintes: <code>HmacSHA1</code>, <code>HmacSHA256</code>, <code>HmacSHA384</code> ou <code>HmacSHA512</code>. Permite que o conector receba a chave dinamicamente.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Secret Key Type</strong></td><td>Exibido apenas se nenhuma conta for selecionada e o <strong>Crypto Algorithm</strong> for um dos seguintes: <code>HmacSHA1</code>, <code>HmacSHA256</code>, <code>HmacSHA384</code> ou <code>HmacSHA512</code>. Define o tipo de chave informada — <code>String</code>, <code>Hexadecimal</code> ou <code>Base64</code>.</td><td>Seleção</td><td>❌</td><td><code>Hexadecimal</code></td></tr><tr><td><strong>Charset</strong></td><td>Exibido apenas quando o <strong>Secret Key Type</strong> é <code>String</code>. Define o conjunto de caracteres da chave.</td><td>Seleção</td><td>❌</td><td><code>UTF-8</code></td></tr><tr><td><strong>BCrypt Version</strong></td><td>Exibido apenas quando o <strong>Crypto Algorithm</strong> é <code>BCrypt</code>. Define a versão do algoritmo a ser usada.</td><td>Seleção</td><td>❌</td><td><code>2y</code></td></tr><tr><td><strong>Salt</strong></td><td>Exibido apenas quando o <strong>Crypto Algorithm</strong> é <code>BCrypt</code>. Cadeia de 16 bytes adicionada ao valor do hash. Se não for informada, um valor aleatório será usado.</td><td>String</td><td>✅</td><td>N/A</td></tr><tr><td><strong>Cost Factor</strong></td><td>Exibido apenas quando o <strong>Crypto Algorithm</strong> é <code>BCrypt</code>. Determina o número de rodadas do hash (2^n, em que <em>n</em> é o fator de custo, entre 4 e 20).</td><td>Integer</td><td>❌</td><td><code>4</code></td></tr></tbody></table>
{% endtab %}

{% tab title="Documentation" %}

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Tipo de dado</th><th>Suporta DB</th><th>Valor padrão</th></tr></thead><tbody><tr><td><strong>Documentation</strong></td><td>Campo opcional para descrever a configuração do conector e eventuais regras de negócio relevantes.</td><td>String</td><td>❌</td><td>N/A</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## **Informações adicionais sobre os parâmetros**

### **Hash gerado**

O conector gera um hash a partir da string informada no campo **Payload** quando a operação selecionada é **Hash Payload**.

Se a operação selecionada for **Hash Fields**, o conector gera o hash a partir da string encontrada nos campos especificados no JSON de entrada.

### **Cost Factor**

No algoritmo **BCrypt**, o fator de custo aumenta exponencialmente o tempo de processamento e os recursos necessários. O algoritmo é executado consecutivamente conforme o número de rodadas derivado do cálculo `2ⁿ`, em que “n” é o fator de custo.

Os exemplos a seguir ilustram como o tempo de execução pode variar conforme o fator de custo. Os testes foram realizados usando um payload de 1 MB e os valores mínimo e máximo permitidos para o algoritmo BCrypt.

**Cost Factor 4**

* **Pipeline pequeno:** Média de 0,98s
* **Pipeline médio:** Média de 0,64s
* **Pipeline grande:** Média de 0,07s

**Cost Factor 20**

* **Pipeline pequeno:** Média de 8m 7s
* **Pipeline médio:** Média de 3m 56s
* **Pipeline grande:** Média de 1m 53s

Esses resultados podem variar dependendo do fluxo de integração, do tamanho da mensagem e do fator de custo aplicado.

O fator de custo do BCrypt pode variar de 4 a 31. No entanto, valores acima de 20 resultam em cargas de processamento e tempos de execução muito altos, frequentemente excedendo os limites de timeout do pipeline. Por esse motivo, o conector **Hash** aceita no máximo o valor **20** para o fator de custo.

Ao usar o algoritmo BCrypt com o conector **Hash**, mantenha o fator de custo dentro desse limite para evitar falhas de validação ou processamento no fluxo de integração.

## **Fluxo de mensagens**

### **Entrada**

#### **Operação: Hash Fields**

Ao usar a operação **Hash Fields**, o conector pode receber qualquer mensagem de entrada, mas é necessário configurar a propriedade **JSON Field Path** para definir onde o hash será aplicado. Por exemplo:

**JSON Field Path:** `data.test`

**Payload:**

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

Nesse caso, o conector procura a propriedade `test` dentro da propriedade `data`.

#### **Operação: Hash Payload**

Ao usar a operação **Hash Payload**, a mensagem que será convertida em hash deve ser informada no campo **Payload**.

#### **Operação: Hash Files**

Ao usar a operação **Hash Files**, o nome do arquivo deve ser informado no campo **File Name**.

### **Saída**

#### **Operação: Hash Fields**

A saída mantém a mesma estrutura da entrada, mas inclui o hash gerado.

Se a propriedade **Preserve Original** estiver ativada, a saída mantém o campo original e adiciona um novo campo prefixado com um sublinhado (`_`):

{% code expandable="true" %}

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

{% endcode %}

#### **Operação: Hash Payload**

A saída contém a propriedade `result` com o hash da mensagem informada:

```json
{  
    "result": "3851b1ae73ca0ca6e3c24a0256a80ace"
}
```

**Exemplo de erro**

```json
{
  "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` — indica que ocorreu um erro durante a execução.
* **`message`:** mensagem de erro do conector.
* **`error`:** mensagem detalhada de erro retornada pelo algoritmo de hash.

#### **Operação: Hash Files**

A saída exibe uma propriedade `result` contendo o hash gerado de acordo com o algoritmo selecionado.

**Exemplo usando SHA-256:**

```json
{
  "result": "aff746225015b78af3c3f0a7540b10c300d73b3b562cec75ef2df9cfbf7ae2b6"
}
```

## **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:** `true`
* **Result as Hexadecimal:** `true`

**Entrada**

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

**Saída**

{% code expandable="true" %}

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

{% endcode %}

#### **Exemplo 2**

* **Crypto Operation:** `Hash Fields`
* **Crypto Algorithm:** `HmacSHA256`
* **Account:** *(vazio)*
* **Secret Key:** `001def0209`
* **Secret Key Type:** `Hexadecimal` (o valor do campo **Secret Key** deve estar em formato hexadecimal)
* **JSON Field Path:** `data.test`
* **Preserve Original:** `true`
* **Result as Hexadecimal:** `true`

**Entrada**

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

**Saída**

{% code expandable="true" %}

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

{% endcode %}

#### **Exemplo 3**

* **Crypto Operation:** `Hash Fields`
* **Crypto Algorithm:** `BCrypt`
* **BCrypt Version:** `2y`
* **Salt:** `N9qo8uLOickgx2ZM`
* **Cost:** `6`
* **JSON Field Path:** `data.test`
* **Preserve Original:** `true`

**Entrada**

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

**Saída**

{% code expandable="true" %}

```json
{
    "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"
        }
    ]
}
```

{% endcode %}

### **Operação: Hash Payload**

#### **Exemplo 1**

* **Crypto Operation:** `Hash Payload`
* **Crypto Algorithm:** `SHA-256`
* **Payload:** *(qualquer payload)*
* **Result as Hexadecimal:** `true`

**Saída**

```json
{  
    "result": "2e954593b0b51547656f7f06ec3818a2b42fed46307b81bd493133aa1ce45173"
}
```

#### **Exemplo 2**

* **Crypto Operation:** `Hash Payload`
* **Crypto Algorithm:** `HmacSHA512`
* **Account:** *(vazio)*
* **Secret Key:** `001def0209`
* **Secret Key Type:** `Hexadecimal`
* **Payload:** *(qualquer payload)*
* **Result as Hexadecimal:** `true`

**Saída**

```json
{  
  "result": "517da9449385a43478309459adf9304bd3c8f63cd1d388abd5cbc02b81d8ccb39d303f877019aebfed073166e6c410197e10077f6df3f7a3b3f50adb8cd09580"
}
```

#### **Exemplo 3**

* **Crypto Operation:** `Hash Payload`
* **Crypto Algorithm:** `BCrypt`
* **BCrypt Version:** `2b`
* **Salt:** `N9qo8uLOickgx2ZM`
* **Cost:** `10`
* **Payload:** `{{ message.data }}`

**Entrada**

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

**Saída**

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

### **Operação: Hash Files**

Quando a operação **Hash Files** é selecionada, o conector gera um hash a partir do arquivo informado no campo **File Name**.

O arquivo deve ter sido previamente processado no pipeline, por exemplo, por meio de um conector [**File Writer**](/documentation/connectors-and-triggers/pt-br/connectors/files/file-writer.md).

#### **Exemplo**

* **Crypto Operation:** `Hash File`
* **Crypto Algorithm:** `SHA-256`
* **File Name:** `{{ message.fileName }}` (os dados são passados por meio do conector **File Writer**)
* **Result as Hexadecimal:** `true`

**Entrada**

```json
{
  "data": "linha 1",
  "fileName": "test"
}
```

**Saída**

```json
{
  "result": "aff746225015b78af3c3f0a7540b10c300d73b3b562cec75ef2df9cfbf7ae2b6"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/connectors/security/hash.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
