> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Extensão vsql_crypto para MySQL

> A extensão vsql_crypto traz ao MySQL o conjunto de funções do pgcrypto: hashing, assinaturas HMAC, criptografia AES, hashing de senhas e dados aleatórios seguros.

O `vsql_crypto` traz ao MySQL um conjunto de funções compatível com o
`pgcrypto`, construído sobre o OpenSSL. Ele cobre quatro tarefas: fazer o hash
de um valor, assinar um payload, criptografar uma coluna e armazenar uma senha
que você pode verificar mais tarde.

| | |
| - | - |
| **Mantenedor** | VillageSQL |
| **Código-fonte e documentação completa** | [villagesql/vsql-crypto](https://github.com/villagesql/vsql-crypto) |
| **Licença** | GPL-2.0 |

## Instalar

O `vsql_crypto.veb` já está no diretório `lib/veb/` do servidor se você
instalou o VillageSQL com o script de instalação, a imagem Docker ou um tarball
de release. Instale-o no servidor com uma única instrução:

```sql theme={null}
INSTALL EXTENSION vsql_crypto;
```

Confirme que ele está lá:

```sql theme={null}
SELECT EXTENSION_NAME
FROM INFORMATION_SCHEMA.EXTENSIONS
WHERE EXTENSION_NAME = 'vsql_crypto';
```

```
+----------------+
| EXTENSION_NAME |
+----------------+
| vsql_crypto    |
+----------------+
```

Para compilá-lo você mesmo, siga as instruções de compilação no
[repositório](https://github.com/villagesql/vsql-crypto).

## O que ela adiciona

| Função | Retorna | O que faz |
| - | - | - |
| `digest(data, algorithm)` | binário | Faz o hash dos dados com `md5`, `sha1`, `sha224`, `sha256`, `sha384` ou `sha512` |
| `hmac(data, key, algorithm)` | binário | Assina os dados com um hash com chave |
| `encrypt(data, key, type)` | binário | Criptografa com AES |
| `decrypt(data, key, type)` | binário | Reverte `encrypt` com a mesma chave |
| `crypt(password, salt)` | texto | Faz o hash de uma senha em uma string que carrega os seus próprios parâmetros |
| `gen_salt(type, iterations)` | texto | Produz um salt para `crypt`, somente para `pbkdf2-sha256` e `pbkdf2-sha512` |
| `gen_random_bytes(n)` | binário | Bytes aleatórios criptograficamente seguros |
| `gen_random_uuid()` | texto | Um UUID aleatório versão 4 como texto |
| `crypto_version()` | texto | A versão do OpenSSL com a qual a extensão foi vinculada |

As funções marcadas como binário retornam bytes brutos, então envolva-as em
`HEX()` para lê-las. As demais retornam texto.

## Exemplo

Assine um payload:

```sql theme={null}
SET @secret = 'shared-key';
SELECT HEX(hmac('{"order":4711}', @secret, 'sha256')) AS signature;
```

```
+------------------------------------------------------------------+
| signature                                                        |
+------------------------------------------------------------------+
| 7261870227EF8090041AB514536550671974770FCE19416ABB634C55389C3141 |
+------------------------------------------------------------------+
```

Armazene uma senha. O resultado carrega o algoritmo, a contagem de iterações e
o salt, então a verificação não precisa de nada mais guardado ao lado dele:

```sql theme={null}
SELECT crypt('correct horse battery', gen_salt('pbkdf2-sha256', 100000)) AS hash;
```

```
+------------------------------------------------------------------------------------------+
| hash                                                                                     |
+------------------------------------------------------------------------------------------+
| $pbkdf2-sha256$100000$N6MXcYhD7SS4DS9sVhaQag$rv6zFwkwfo4N8+lgEpU5/LR4mOLtio04b6iKCSRlF5E |
+------------------------------------------------------------------------------------------+
```

O seu salt é aleatório, então o hash é diferente a cada chamada.

> [!NOTE]
>
> O `gen_salt` oferece suporte somente a `pbkdf2-sha256` e `pbkdf2-sha512`. Pedir `bf`, `md5` ou `des`
> retorna NULL, e `crypt` com um salt NULL retorna NULL, então hashes bcrypt
> gravados pelo `pgcrypto` não podem ser verificados aqui.

## Veja também

* [Fazendo hash de dados no MySQL](https://villagesql.com/docs/en/guides/hashing-data.md) — qual algoritmo usar e o que armazenar
* [Assinando payloads com HMAC](https://villagesql.com/docs/en/guides/hmac-mysql.md) — assinaturas de webhook e verificação de tokens
* [Criptografando colunas](https://villagesql.com/docs/en/guides/encrypting-columns.md) — manejo de chaves e o que a criptografia não protege
* [Instalar extensões](https://villagesql.com/docs/pt-BR/extensions/install.md) — como o `INSTALL EXTENSION` funciona e onde o servidor procura um bundle
* [Extensões disponíveis](https://villagesql.com/docs/pt-BR/extensions/catalog) — o catálogo completo
* [villagesql/vsql-crypto](https://github.com/villagesql/vsql-crypto) — código-fonte, instruções de compilação e as limitações conhecidas


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.