# encrypt

{% hint style="info" %}
This article assumes knowledge of [variables](/3.5.4/data-pipelines/extract/language/var.md).
{% endhint %}

The `encrypt` statement is used to conceal the value of a variable, such that it does not appear in plain text in a USE script.

## Syntax

**`encrypt var`***`name = value_to_be_encrypted`*

## Details

{% hint style="warning" %}
The `encrypt` statement differs from other statements in that it takes effect before execution of a USE script begins. In this regard is is effectively a directive to the internal script pre-processor which prepares a script for execution.
{% endhint %}

{% hint style="danger" %}
**Comments, quotes and escapes in the value to be encrypted are treated as literal text up until the end of the line.**

White-space following the value to be encrypted will therefore be included in the encrypted result.

White-space preceding the value to be encrypted will be ignored and will **not** be included in the encrypted result.
{% endhint %}

### Encrypting one or more variables

Any variable prefixed with the word *encrypt* will be encrypted by the pre-processor and the script file itself will be modified as follows:

* All text (including trailing white-space) from the word following the `=` character up to the end of the line is encrypted
* The encrypted value is base64 encoded
* The original variable value in the USE script is substituted with the result
* The `encrypt` keyword for that variable is changed to `encrypted`
* The USE script is overwritten on disk in this new form

This process is repeated for all variables preceded by the `encrypt` keyword.

{% hint style="info" %}
As a side effect of the encryption process, it is not currently possible to encrypt a value that begins with a space or a tab. This functionality will be implemented in due course.
{% endhint %}

### Using encrypted variables

Once encrypted a variable can be used just as any other, the only requirement being that the `encrypted` keyword preceding its declaration is not removed or modified.

To change the value of an encrypted variable simply replace the declaration altogether and precede the new declaration with `encrypt`. Upon first execution, the USE script will be updated with an encrypted version of the variable as described above.

{% hint style="danger" %}
**Encrypted values can only be used on the system that they were created on. If an encrypted value is moved or copied to a different installation of Exivity then any attempt to reference or decrypt it will result in something other than the original value.**
{% endhint %}

## Example

Firstly, create the script as usual, with `encrypt` preceding any variables that are to be encrypted:

```
# ---- Start Config ----
encrypt var username = admin
encrypt var password = topsecret
var server = "http://localhost"
var port = 8080
var api_method = getdetails
# ---- End Config ----

set http_authtype basic
set http_username ${username}
set http_password ${password}

buffer {response} = http GET ${server}:${port}/rest/v2/${api_method}
```

Secondly, run the script. Prior to execution the script will be automatically modified as shown below:

```
# ---- Start Config ----
encrypted var username = AGF5dU0KJaB+NyHWu2lkhw==
encrypted var password = b0Sa29tyL+M8wix/+JokjMCdeMwiY9n5
var server = "http://localhost"
var port = 8080
var api_method = getdetails
# ---- End Config ----

set http_authtype basic
set http_username ${username}
set http_password ${password}

buffer {response} = http GET ${server}:${port}/rest/v2/${api_method}
```


---

# 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://olddocs.exivity.io/3.5.4/data-pipelines/extract/language/encrypt.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.
