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

# Herramienta de Cifrado y Descifrado

> Herramienta de escritorio para cifrar y descifrar query strings y datos de API, y para recibir webhooks en su propio equipo. Incluye instalación, cada pestaña y problemas frecuentes.

## Para qué sirve

Úsela durante la integración para responder preguntas como "¿es correcto mi texto cifrado?" o
"¿cómo llega realmente un webhook?". Puede probar valores y ver resultados antes de escribir código.

<CardGroup cols={2}>
  <Card title="LiveForm" icon="file-text">
    Elija los parámetros de una URL de LiveForm y obtenga el valor `encrypted=`
  </Card>

  <Card title="Face Auth" icon="scan-face">
    Construya URLs de Face Auth y su texto cifrado
  </Card>

  <Card title="API" icon="send">
    Llame a los 17 endpoints desde un formulario y copie el cURL
  </Card>

  <Card title="Webhook" icon="radio">
    Reciba webhooks en su equipo, inspecciónelos y descifre el cuerpo
  </Card>
</CardGroup>

<Note>
  Esta herramienta es para desarrollo y pruebas. Los valores permanecen solo en memoria y nunca se guardan,
  y las claves de API se ocultan en pantalla. No está pensada para formar parte de su flujo de producción.
</Note>

## Descarga

<Tabs>
  <Tab title="macOS">
    Requiere macOS 13 (Ventura) o posterior.

    <Steps>
      <Step title="Descargue">
        [Descargar para macOS](https://argos-logo.s3.ap-northeast-2.amazonaws.com/developer_guide/EnDecryptGUI_Mac_0922.zip)
      </Step>

      <Step title="Descomprima">
        Obtendrá `EnDecryptGUI.app`. Es cómodo moverlo a la carpeta Aplicaciones.
      </Step>

      <Step title="Permita la ejecución la primera vez">
        Al hacer doble clic aparece un aviso de "desarrollador no identificado".

        Abra **Configuración del Sistema → Privacidad y seguridad**, baje hasta el final y,
        junto a `Se ha bloqueado "EnDecryptGUI"`, pulse **Abrir de todos modos**.
        Solo hay que hacerlo una vez.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Windows">
    Requiere Windows 10 de 64 bits o posterior. El runtime de .NET viene incluido, no hay nada más que instalar.

    <Steps>
      <Step title="Descargue">
        [Descargar para Windows](https://argos-logo.s3.ap-northeast-2.amazonaws.com/developer_guide/EnDecryptGUI_Win_0922.zip)
      </Step>

      <Step title="Descomprima">
        <Warning>
          **Extraiga la carpeta completa.** Copiar solo `EnDecryptGUI.exe` no funciona:
          necesita las DLL que están junto a él.
        </Warning>
      </Step>

      <Step title="Permita la ejecución la primera vez">
        Si aparece "Windows protegió su PC", pulse **Más información** y luego **Ejecutar de todas formas**.
        Este aviso aparece porque la aplicación no está firmada digitalmente.
      </Step>
    </Steps>
  </Tab>
</Tabs>

## Cambiar de pestaña con el teclado

También puede cambiar de pestaña con el teclado: `⌘1`-`⌘4` en macOS y `Ctrl+1`-`Ctrl+4` en Windows,
en el orden LiveForm, Face Auth, API, Webhook. Pase el cursor sobre una pestaña para ver su atajo.

<Frame caption="Pase el cursor sobre una pestaña para ver su atajo">
  <img src="https://mintcdn.com/argosidentity/kLVIsO7iSsp5Qsqw/images/encryption-tool/tab-shortcut.png?fit=max&auto=format&n=kLVIsO7iSsp5Qsqw&q=85&s=208beda30ed8fe922dddcc2af4ce65cf" alt="Atajo de pestaña" width="497" height="80" data-path="images/encryption-tool/tab-shortcut.png" />
</Frame>

## Antes de empezar — dos comprobaciones

<Steps>
  <Step title="Obtenga la clave de API del proyecto">
    Panel → **Gestión de Proyectos → Configuración del Proyecto → Información de Integración**.
    Todo el cifrado y descifrado de esta herramienta se basa en esa clave.
  </Step>

  <Step title="Compruebe el algoritmo de cifrado">
    Panel → **Gestión de Proyectos → Configuración de Seguridad → Protección de Datos** indica
    si su proyecto usa `ECB` o `GCM`.

    Si el selector **Encryption** de la herramienta no coincide, los resultados no cuadrarán.
    El valor por defecto es `ECB` y vuelve a `ECB` cada vez que reinicia la aplicación.
  </Step>
</Steps>

<Info>
  El selector **Encryption: ECB / GCM / CBC(Webhook)** de la parte superior elige *cómo* cifrar.
  No son los botones Encrypt/Decrypt, que eligen *en qué dirección* convertir.

  | Opción           | Cuándo usarla                                                  |
  | ---------------- | -------------------------------------------------------------- |
  | **ECB**          | Su panel está configurado en ECB. Query strings y datos de API |
  | **GCM**          | Su panel está configurado en GCM. Query strings y datos de API |
  | **CBC(Webhook)** | Para abrir el valor `data` recibido en un webhook              |
</Info>

## Pestaña LiveForm — construir parámetros de URL

Aquí se produce el valor `encrypted=` para una URL de LiveForm.

<Frame caption="Pestaña LiveForm: construya un conjunto de parámetros y obtenga el valor cifrado">
  <img src="https://mintcdn.com/argosidentity/kLVIsO7iSsp5Qsqw/images/encryption-tool/liveform.png?fit=max&auto=format&n=kLVIsO7iSsp5Qsqw&q=85&s=00f3fd0980efdcc9179599a420b4a6ec" alt="Pestaña LiveForm: construya un conjunto de parámetros y obtenga el valor cifrado" width="1007" height="753" data-path="images/encryption-tool/liveform.png" />
</Frame>

<Steps>
  <Step title="Elija el flujo">
    Seleccione **ID document** o **Knowledge-based**. Cada uno mantiene su propio borrador,
    así que alternar entre ellos nunca borra lo que escribió.
  </Step>

  <Step title="Introduzca la clave de API">
    El botón con forma de ojo alterna la visibilidad.
  </Step>

  <Step title="Añada parámetros con Add field">
    Elija los parámetros uno a uno y rellene los valores. Los campos de selección múltiple,
    como países y tipos de documento, se unen con comas en el orden en que los seleccionó.
  </Step>

  <Step title="Pulse Encrypt parameters">
    El cuadro de la derecha se rellena con `encrypted=` seguido del texto cifrado codificado para URL.
    **Cópielo y añádalo a su URL.**

    Debajo, **Decryption Result** muestra el JSON original que acaba de cifrar, con formato legible,
    para que confirme qué se incluyó.
  </Step>
</Steps>

<Tip>
  **Los avisos no impiden el cifrado.** Por ejemplo, `selectedIdType` sin
  `selectedIssuingCountry` muestra una advertencia pero cifra igualmente. Es intencionado,
  para que pueda probar combinaciones no válidas.

  Solo tres cosas impiden cifrar: no haber añadido ningún parámetro, dejar la clave de API vacía,
  o un color o una fecha con formato incorrecto.
</Tip>

### El editor de `knowledgePrefill`

En el flujo Knowledge-based, `knowledgePrefill` abre su propio editor.
Elija entre `name`, `gender`, `birthDate`, `nationality`, `SSN`, `address` y `phoneNumber`,
escriba los valores, y la cadena combinada, por ejemplo `gender=male,birthDate=1990-01-01`,
se compone en tiempo real.

Para probar claves que no están en la lista, cambie al modo **Raw text**.
Los borradores de Fields y Raw se conservan por separado.

<Note>
  Los campos que deje vacíos se omiten. Las sugerencias en gris como `Jane Doe` son ejemplos,
  no valores por defecto: solo se cifra lo que usted escribe realmente.
</Note>

## El conversor de la derecha — un valor, rápido

Úselo para cifrar o descifrar **cualquier texto** sin construir un conjunto de parámetros.
Solo necesita la clave de API y el cuadro de entrada. Está disponible en las pestañas LiveForm y Face Auth.

| Botón                         | Resultado                                                                   |
| ----------------------------- | --------------------------------------------------------------------------- |
| **Convert** (con Encrypt)     | Texto cifrado en bruto: Base64 para ECB/CBC, hexadecimal para GCM           |
| **Convert URL** (con Encrypt) | Texto cifrado ya codificado para URL. Péguelo justo después de `encrypted=` |
| **Convert** (con Decrypt)     | El texto original                                                           |

Al descifrar se aceptan tal cual estas cuatro formas:

* texto cifrado en bruto
* texto cifrado codificado para URL
* `encrypted=...`
* una URL completa que contenga un parámetro `encrypted`

<Warning>
  **GCM produce un resultado distinto cada vez, incluso con la misma entrada.** Es lo esperado:
  añade aleatoriedad nueva por seguridad. Al descifrar siempre se obtiene el mismo valor original.
</Warning>

## Pestaña Face Auth

Pegue la URL de Face Auth del panel y la región se detecta automáticamente, rellenando `pid`.
Introduzca la clave de API y un `sid` **aprobado**, y pulse **Proceed** para construir la URL final.

<Frame caption="Pestaña Face Auth: pegue la URL del panel y construya el enlace final">
  <img src="https://mintcdn.com/argosidentity/kLVIsO7iSsp5Qsqw/images/encryption-tool/face-auth.png?fit=max&auto=format&n=kLVIsO7iSsp5Qsqw&q=85&s=7bddf945c8aa0ec6450af6398ee21717" alt="Pestaña Face Auth: pegue la URL del panel y construya el enlace final" width="1006" height="751" data-path="images/encryption-tool/face-auth.png" />
</Frame>

| Región       | URL base                                          |
| ------------ | ------------------------------------------------- |
| Develop (US) | `https://form-dev.argosidentity.net/face-auth`    |
| Develop (KR) | `https://form-dev-kr.argosidentity.net/face-auth` |
| Live         | `https://form.argosidentity.com/face-auth`        |

<Note>
  `pid` y `lang` no se cifran. Lo que se cifra es `sid` más los campos opcionales que haya rellenado.
  `mainColor` e `innerColor` están desactivados actualmente: se ven pero no se pueden editar y quedan fuera del resultado.
</Note>

## Pestaña API

Rellene un formulario para cualquiera de los 17 endpoints y envíe una petición real.
Configure la URL base y la clave de API a la izquierda, rellene los parámetros a la derecha y pulse **Proceed**.

<Frame caption="Pestaña API: rellene el formulario de un endpoint y revise el cURL">
  <img src="https://mintcdn.com/argosidentity/kLVIsO7iSsp5Qsqw/images/encryption-tool/api.png?fit=max&auto=format&n=kLVIsO7iSsp5Qsqw&q=85&s=6c5b56eaa05d6c36d50e59e56052ec43" alt="Pestaña API: rellene el formulario de un endpoint y revise el cURL" width="1005" height="754" data-path="images/encryption-tool/api.png" />
</Frame>

* La **vista previa de cURL** se actualiza mientras escribe. Cópiela y ejecútela en un terminal tal cual.
* Las respuestas muestran el estado HTTP y el tiempo transcurrido. El JSON se formatea para facilitar la lectura.
* También se muestran su IP pública, su IP local y el estado de VPN, útil en proyectos con restricción por IP.

<Warning>
  **Son peticiones reales.** Las de lectura son seguras, pero los endpoints de creación, modificación
  y borrado surten efecto de verdad. No pruebe contra un proyecto de producción: cree un proyecto de prueba aparte.
</Warning>

### Uso de Transferencia Segura de Datos (cifrado)

Si **Transferencia Segura de Datos** está activada en su proyecto, los endpoints de Submission muestran
una casilla **Encryption**. Al marcarla, los campos normales se sustituyen por un único campo
`data (encryption)`.

<Steps>
  <Step title="Escriba en JSON lo que quiere enviar">
    ```json theme={null}
    { "submission_id": "abc123def456" }
    ```
  </Step>

  <Step title="Cífrelo en el conversor">
    Use el conversor de la pestaña LiveForm o Face Auth con **ECB**.
  </Step>

  <Step title="Péguelo en data (encryption) y pulse Proceed">
    Se acepta tanto el texto cifrado en bruto como el codificado para URL.
  </Step>
</Steps>

<Note>
  La respuesta también llega cifrada, con la forma `{"data":"...","isEncrypted":true}`.
  Copie el valor de `data` y páselo por el conversor en modo **Decrypt**.
</Note>

La forma en que viaja el texto cifrado varía según el método. Consulte
[Opciones de Transferencia Segura de Datos](/es/idcheck/getting-started/encrypt-and-decrypt-data/overview#4-opciones-de-transferencia-segura-de-datos)
para el contrato exacto.

## Pestaña Webhook — recibir webhooks en su equipo

Un webhook es ARGOS enviando resultados **a su servidor**. Pero el equipo en el que desarrolla
no tiene dirección pública, así que ARGOS no puede alcanzarlo.

**ngrok** resuelve esto. Crea una dirección pública temporal y reenvía a su equipo
todo lo que se envíe allí.

```
Servidor ARGOS  →  https://xxxx.ngrok-free.app  →  su PC (localhost:8000)  →  esta herramienta
```

<Note>
  **Esta herramienta usa el puerto 8000 de su equipo.** No se puede cambiar.
  Si sigue los pasos siguientes, la herramienta ejecuta `ngrok http 8000` por usted:
  nunca tendrá que escribir el comando.
</Note>

<Frame caption="Pestaña Webhook: inspeccione las cabeceras y el cuerpo de una solicitud recibida">
  <img src="https://mintcdn.com/argosidentity/kLVIsO7iSsp5Qsqw/images/encryption-tool/webhook.png?fit=max&auto=format&n=kLVIsO7iSsp5Qsqw&q=85&s=dce1c8bc8cf0971ef9c01d476a030c09" alt="Pestaña Webhook: inspeccione las cabeceras y el cuerpo de una solicitud recibida" width="1006" height="753" data-path="images/encryption-tool/webhook.png" />
</Frame>

### Paso 1 — Instalar ngrok

<Tabs>
  <Tab title="macOS">
    Abra Terminal e instálelo con Homebrew.

    ```bash theme={null}
    brew install ngrok
    ```

    <Warning>
      **Instálelo con Homebrew.** La herramienta solo busca en estas tres ubicaciones:

      * `/opt/homebrew/bin/ngrok`
      * `/usr/local/bin/ngrok`
      * `/opt/homebrew/opt/ngrok/bin/ngrok`

      Un binario descargado de la web a Descargas o al Escritorio no se encontrará.
      Si ya lo hizo así, muévalo a `/usr/local/bin/`.
    </Warning>
  </Tab>

  <Tab title="Windows">
    Abra PowerShell e instálelo.

    ```powershell theme={null}
    winget install ngrok.ngrok
    ```

    **Cierre y vuelva a abrir PowerShell** después para que se detecte.

    <Note>
      En Windows la herramienta busca en este orden:
      `tools\ngrok.exe` dentro de la carpeta de la aplicación → la carpeta de la aplicación →
      la carpeta de enlaces de WinGet → su PATH.

      Una instalación con winget se detecta automáticamente.
    </Note>
  </Tab>
</Tabs>

### Paso 2 — Conectar su cuenta de ngrok (una sola vez)

ngrok requiere una cuenta gratuita.

<Steps>
  <Step title="Regístrese y copie su token">
    Regístrese en [ngrok.com](https://ngrok.com) y copie el token de la página
    **Your Authtoken**.
  </Step>

  <Step title="Regístrelo">
    ```bash theme={null}
    ngrok config add-authtoken SU_TOKEN
    ```

    `Authtoken saved` significa que ha terminado. Es una vez por equipo.
  </Step>
</Steps>

### Paso 3 — Iniciar el servidor

<Steps>
  <Step title="Pulse Start Server en la pestaña Webhook">
    La herramienta abre el puerto 8000 y lanza ngrok por usted. Tarda unos segundos.
  </Step>

  <Step title="Copie la URL pública">
    Aparece una dirección que empieza por `https://`. Pulse **Copy** al lado.

    El estado indica **Running** y aparece un punto verde en la pestaña Webhook.
  </Step>

  <Step title="Regístrela en el panel">
    Péguela en **Gestión de Proyectos → Configuración de Webhook** y guarde.
  </Step>

  <Step title="Pruébelo">
    Realice un envío de KYC. La petición aparece de inmediato en la lista de la izquierda.
    Haga clic en ella para ver la marca de tiempo, la IP de origen, las cabeceras y el cuerpo a la derecha.
  </Step>
</Steps>

<Warning>
  **En una cuenta gratuita de ngrok la dirección cambia cada vez que se reinicia.**
  Cuando cambie, actualice de nuevo la configuración de webhook en el panel.
</Warning>

### Descifrar lo recibido

Si la Transferencia Segura de Datos está activada, el cuerpo llega cifrado.

Pulse **Decrypt** encima del cuerpo para abrirlo.
Si funciona, aparece la etiqueta **Decrypted** y el cuerpo se sustituye por JSON legible.

<Note>
  Decrypt usa **la clave de API que introdujo en la pestaña LiveForm**.
  Introdúzcala allí primero, o verá un aviso indicando que falta la clave.

  Además siempre usa **CBC**, independientemente del selector Encryption de la parte superior,
  porque la especificación establece CBC para los cuerpos de webhook. No necesita cambiar el selector.
</Note>

**Save Logs…** exporta siempre los cuerpos **tal como se recibieron**.
Ni la vista descifrada ni su clave de API se escriben en el archivo.

### Probar el bloqueo por IP

Despliegue **IP blocking** abajo a la izquierda e introduzca una dirección IPv4 para responder
con 403 a las peticiones procedentes de ella. Aparecen en la lista como entradas **BLOCK** en rojo.
Útil para comprobar el comportamiento de reintento.

## Resolución de problemas

<AccordionGroup>
  <Accordion title="El descifrado produce texto ilegible" icon="triangle-exclamation">
    Normalmente es un **algoritmo que no coincide**. Compruebe si su panel
    (**Configuración de Seguridad → Protección de Datos**) indica `ECB` o `GCM`,
    y ajuste el selector Encryption de la herramienta para que coincida.

    La herramienta vuelve a `ECB` en cada arranque, así que un proyecto GCM requiere seleccionarlo cada vez.

    Si el algoritmo es correcto, revise la clave de API. Un espacio sobrante al principio o al final
    es una causa habitual: la herramienta usa exactamente lo que usted escribió, y un solo espacio lo cambia todo.
  </Accordion>

  <Accordion title="No funciona cuando lo pongo en una URL" icon="link-slash">
    Compruebe si lo ha **codificado para URL dos veces**. Es con diferencia la causa más frecuente.

    El resultado de **Convert URL** **ya está codificado**. Péguelo directamente después de `encrypted=`.
    Aplicarle `encodeURIComponent()` de nuevo en su código convierte `%2B` en `%252B` y lo rompe.

    | Situación                         | Botón a usar                                       |
    | --------------------------------- | -------------------------------------------------- |
    | Pegar directamente en una URL     | **Convert URL**                                    |
    | Codificarlo usted mismo en código | **Convert** (tome el valor en bruto y codifíquelo) |

    <Warning>
      Una codificación incorrecta puede devolver **un resultado vacío sin ningún error**.
      Si observa "no hay error pero tampoco resultados", sospeche de esto primero.
    </Warning>
  </Accordion>

  <Accordion title="Start Server no arranca" icon="server">
    **No encuentra ngrok** — revise cómo lo instaló. En macOS debe estar en una ubicación de Homebrew;
    en Windows quizá deba reiniciar la aplicación después de instalarlo.

    **Sin token de autenticación** — asegúrese de haber ejecutado `ngrok config add-authtoken`.

    **`ERR_NGROK_334`** — ya hay un ngrok en marcha en otro sitio con la misma cuenta.
    Una cuenta gratuita permite solo uno a la vez. Detenga el otro e inténtelo de nuevo.

    **El puerto 8000 está ocupado** — otro programa lo está usando. Ciérrelo y reinténtelo.
  </Accordion>

  <Accordion title="Aparece Running · existing ngrok tunnel" icon="circle-info">
    Significa que la herramienta encontró un ngrok ya en marcha y lo está reutilizando. Es normal.

    Solo reutiliza uno que reenvíe al **puerto 8000**. Si usted inició
    `ngrok http 3000`, la herramienta lo ignora.

    Si quiere iniciar ngrok usted mismo, use exactamente:

    ```bash theme={null}
    ngrok http 8000
    ```

    En ese caso **Stop Server** no detendrá ese ngrok, porque lo inició usted.
  </Accordion>

  <Accordion title="Los webhooks no llegan nunca" icon="inbox">
    1. Asegúrese de haber pegado la URL pública **actual** en la configuración de webhook del panel.
       Una cuenta gratuita de ngrok cambia la dirección en cada reinicio.
    2. Asegúrese de que la dirección empieza por `https://`.
    3. Asegúrese de no haber dejado una dirección en IP blocking.
  </Accordion>

  <Accordion title="La aplicación se cierra al instante en Windows" icon="windows">
    Compruebe que extrajo la **carpeta completa**.
    Mover `EnDecryptGUI.exe` por separado no funciona: se necesitan todas las DLL de la misma carpeta.
  </Accordion>
</AccordionGroup>

## Notas

* Las entradas, las claves de API y los resultados de conversión permanecen **solo en memoria**. Desaparecen al salir y nunca se escriben en disco.
* Las pestañas LiveForm y Face Auth no usan red en absoluto. Todo se calcula localmente.
* Solo las pestañas API y Webhook usan la red.
* La clave de API de cada pestaña es independiente. La única excepción es Decrypt de Webhook, que lee la clave de LiveForm.

<Card title="Consultar la especificación de cifrado" icon="lock" href="/es/idcheck/getting-started/encrypt-and-decrypt-data/overview">
  Para algoritmos, derivación de claves y código de ejemplo por lenguaje, consulte la página de Cifrado y Descifrado de Datos.
</Card>
