149 lines
5.1 KiB
Markdown
149 lines
5.1 KiB
Markdown
# 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` |
|
|
|
|
> **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.
|
|
|
|
### 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"
|
|
```
|
|
|
|
|