MQLArticles/Utils/Encrypt/README.md

149 lines
5.1 KiB
Markdown
Raw Permalink Normal View History

2026-03-27 21:51:16 +00:00
# Encrypt
Este modulo integra una clase CEncryptor, clase warppers con funciones utiles para encryptar y desencriptar archivos y texto se basa en las funciones nativas que proporciona MQL5 (`CryptEncode` / `CryptDecode`).
## Métodos soportados
| Método | Key requerida |
|---|---|
| `CRYPT_AES128` | 16 chars |
| `CRYPT_AES256` | 32 chars |
| `CRYPT_DES` | 7 chars |
> Los métodos de hash (`CRYPT_HASH_SHA1`, `CRYPT_HASH_SHA256`, `CRYPT_HASH_MD5`) y `CRYPT_BASE64` no son métodos de encriptación y no están soportados por esta clase.
---
## Funcion EncryptFile
### Firma:
```cpp
bool EncryptFile(const string& file_name, bool common_flag, ENUM_CRYPT_METHOD method, bool delete_prev_file, string ext_encrypt = "")
```
### Parametros
| Parámetro | Descripción |
|---|---|
| `file_name` | Ruta del archivo encriptado |
| `common_flag` | `true` = carpeta Common, `false` = `MQL5\Files` del terminal |
| `method` | Método usado al encriptar (ver tabla de métodos) |
| `delete_prev_file` | `true` = elimina el archivo encriptado original tras encriptar |
| `ext_encrypt` | `true` = Extension para el archivo encryptado por defecto nada ("") |
### Ejemplos
```cpp
enc.EncryptFile("file.txt", false, CRYPT_AES256, false, ".enc");
```
---
## Funcion DecryptFile
### Firma
```cpp
// Versión 1 — resultado en archivo
bool DecryptFile(const string& file_name, bool common_flag, ENUM_CRYPT_METHOD method, bool delete_prev_file, string ext_decrypt = "")
// Versión 2 — resultado en memoria
bool DecryptFile(const string& file_name, bool common_flag, ENUM_CRYPT_METHOD method, bool delete_prev_file, uchar& res_data[])
```
### Parámetros comunes
| Parámetro | Descripción |
|---|---|
| `file_name` | Ruta del archivo encriptado |
| `common_flag` | `true` = carpeta Common, `false` = `MQL5\Files` del terminal |
| `method` | Método usado al encriptar (ver tabla de métodos) |
| `delete_prev_file` | `true` = elimina el archivo encriptado original tras desencriptar |
### Parámetro `ext_decrypt` (Versión 1)
Controla el nombre del archivo de salida:
| Valor | Comportamiento | Ejemplo |
|---|---|---|
| `""` | Sobreescribe el mismo archivo | `file.enc` a `file.enc` |
| `".ext"` | Agrega extensión al nombre | `file.enc` a `file.enc.ext` |
| `"-"` | Quita la última extensión | `file.enc` a `file` |
| `".ext-"` | Reemplaza la última extensión | `file.enc` a `file.ext` |
2026-03-28 12:54:35 +00:00
> **Nota:** Si `delete_prev_file = false` y `ext_decrypt = ""`, el archivo encriptado (solo si este no tiene extension, si tiene eg .enc el archivo original no sera sobreescrito solo el encriptado) es sobreescrito con el contenido desencriptado.
2026-03-27 21:51:16 +00:00
### Ejemplos
```cpp
// Versión 1 — quitar extensión .enc
enc.DecryptFile("data.csv.enc", true, CRYPT_AES256, true, "-");
// Resultado: data.csv (data.csv.enc eliminado)
// Versión 1 — reemplazar extensión
enc.DecryptFile("data.csv.enc", true, CRYPT_AES256, false, ".csv-");
// Resultado: data.csv (data.csv.enc conservado)
// Versión 2 — resultado en memoria
uchar buffer[];
enc.DecryptFile("data.csv.enc", true, CRYPT_AES256, false, buffer);
// buffer contiene el contenido desencriptado
```
---
## SetAleatoryKey
### Firma
```cpp
bool SetAleatoryKey(ENUM_CRYPT_METHOD method, FuncGenerateRandomUchar f_generate_char, void* ptr = NULL, uchar chart_start = 32, uchar chart_stop = 255)
```
### Parámetros
| Parámetro | Descripción |
|---|---|
| `method` | Método de encriptación (determina el largo de la key) |
| `f_generate_char` | Función que genera un `uchar` aleatorio |
| `ptr` | Puntero al generador (se pasa a `f_generate_char`, esto es opcional solo si la funcion trabaja con clases) |
| `chart_start` | Valor mínimo del carácter generado (default: 32) |
| `chart_stop` | Valor máximo del carácter generado (default: 255) |
> **Nota:** El largo de la key se determina automáticamente según el método: AES128 = 16, AES256 = 32, DES = 7. La key generada queda almacenada internamente y puede recuperarse con `Key()`.
### Ejemplo
```cpp
CRandomSimple random;
enc.SetAleatoryKey(CRYPT_AES256, RandomSimpleGenerateRandomUchar, &random);
Print(enc.Key()); // key de 32 chars generada
```
---
## EncryptText / DecryptText
### Firma
```cpp
bool EncryptText(const string& initial_text, ENUM_CRYPT_METHOD method, string& encrypted_text)
bool DecryptText(const string& encrypted_text, ENUM_CRYPT_METHOD method, string& decrypted_text)
```
### Parámetros
| Parámetro | Descripción |
|---|---|
| `initial_text` | Texto plano a encriptar |
| `encrypted_text` | String encriptado en BASE64 (entrada en Decrypt, salida en Encrypt) |
| `decrypted_text` | Texto plano recuperado (salida en Decrypt) |
| `method` | Método de encriptación (ver tabla de métodos) |
> **Nota:** El texto encriptado se convierte automáticamente a BASE64 para poder almacenarse como `string`. Al desencriptar se revierte el proceso: BASE64 → bytes → texto original.
### Ejemplo
```cpp
string encrypted, decrypted;
enc.EncryptText("texto secreto", CRYPT_AES256, encrypted);
// encrypted contiene el texto en BASE64
enc.DecryptText(encrypted, CRYPT_AES256, decrypted);
// decrypted == "texto secreto"
```