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

# $wsSecurity - Verschlüsselung

> Modul $wsSecurity zum Verschlüsseln, Entschlüsseln und Hashen von Daten: sensible Informationen wie Passwörter und Token absichern.

Mit dem `$wsSecurity` Modul können Sie Daten verschlüsseln, entschlüsseln und hashen. Es dient dem Schutz sensibler Daten wie Passwörter, Token oder persönliche Informationen. In diesem Abschnitt erfahren Sie, wie Sie die verschiedenen Verschlüsselungs- und Hash-Methoden einsetzen können.

***

## Modulübersicht

**Beispiel / Ausschnitt über** `$wsSecurity`

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{= $wsSecurity | json }}
```

**JSON-Ausgabe**

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "decrypt": "ƒ()",
  "encrypt": "ƒ()",
  "encryptManual": "ƒ()",
  "hash": "ƒ()"
}
```

Anmerkung: `ƒ()` kennzeichnet eine Funktion.

**Methoden in der Übersicht**

| **Methode**       | **Rückgabe-Typ** | **Beschreibung**                                                                                |
| ----------------- | ---------------- | ----------------------------------------------------------------------------------------------- |
| `decrypt()`       | string           | Entschlüsselt Daten, die mit `encrypt()` verschlüsselt wurden.                                  |
| `encrypt()`       | string           | Verschlüsselt Daten mit einem in der Shop-Konfiguration hinterlegten Verschlüsselungsverfahren. |
| `encryptManual()` | map              | Verschlüsselt Daten wie `encrypt()`, gibt aber nur die einzelnen Bestandteil separat zurück.    |
| `hash()`          | string           | Berechnet einen kryptografischen Hash-Wert der Eingabedaten.                                    |

***

## Templates

Die Sicherheitsfunktionen können in jedem Template verwendet werden, typischerweise bei:

* Formularen mit sensiblen Daten
* Token-Generierung für Links
* Passwort-Verarbeitung im Registrierungsprozess
* Datenübergabe an externe Systeme

***

## Variablen

Für `$wsSecurity` stehen keine Variablen zur Verfügung.

***

## Methoden

### \$wsSecurity.decrypt()

Entschlüsselt Daten, die mit `$wsSecurity.encrypt()` verschlüsselt wurden.

**Signatur**\
`$wsSecurity.decrypt(data)`

**Rückgabe**\
`string` - Entschlüsselte Daten im Klartext.

**Parameter**

| **Name** | **Typ** | **Pflicht** | **Beschreibung**                        |
| -------- | ------- | ----------- | --------------------------------------- |
| `data`   | string  | ja          | Verschlüsselte Daten im WEBSALE-Format. |

**Beispiel,** das verschlüsselte Daten entschlüsselt.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $myDecryptedData = $wsSecurity.decrypt($encryptedData) }}
```

### \$wsSecurity.encrypt()

Verschlüsselt Daten mit einem in der Shop-Konfiguration hinterlegten Verschlüsselungsverfahren. Die verschlüsselten Daten können nur mit `decrypt()` wieder entschlüsselt werden.

**Signatur**\
`$wsSecurity.encrypt(id, data, encryptionMethod, encoding)`

**Rückgabe**\
`string` - Verschlüsselte Daten im WEBSALE-Format.

**Parameter**

| **Name**           | **Typ** | **Pflicht** | **Beschreibung**                                                                                                                                                                                                                                                      |
| ------------------ | ------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`               | string  | ja          | ID des konfigurierten Verschlüsselungsverfahrens aus [security - Sicherheitsregeln](/konfiguration/security-sicherheitsregeln).                                                                                                                                       |
| `data`             | string  | ja          | Zu verschlüsselnde Daten.                                                                                                                                                                                                                                             |
| `encryptionMethod` | string  | ja          | Verschlüsselungsmethode.   <br />Mögliche Werte:  <br />- `blowfish` - Blowfish Blockchiffre im ECB-Modus. <br />- `aescbc` - AES Blockchiffre im CBC-Modus. <br />- `aesgcm` - AES Blockchiffre im GCM-Modus. <br />- `tdes` - Triple DES Blockchiffre im CBC-Modus. |
| `encoding`         | string  | ja          | Ausgabe-Encoding: `hex` oder `base64`.                                                                                                                                                                                                                                |

**Beispiel,** das Daten mit AES-GCM verschlüsselt.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $myEncryptedData = $wsSecurity.encrypt("token_v1", "Sensible Daten", "aesgcm", "base64") }}
```

### \$wsSecurity.encryptManual()

Verschlüsselt Daten wie `encrypt()`, gibt aber die einzelnen Bestandteile (Ciphertext, Salt, Auth-Tag) separat zurück. Nützlich für die Integration mit externen Systemen, die ein anderes Format erwarten.

**Signatur**\
`$wsSecurity.encryptManual(id, data, encryptionMethod, encoding)`

**Rückgabe**\
`map` - Map mit den einzelnen Verschlüsselungsteilen.

**Rückgabe-Felder**

| **Rückgabewert** | **Typ** | **Beschreibung**                                         |
| ---------------- | ------- | -------------------------------------------------------- |
| `ciphertext`     | string  | Verschlüsselte Daten.                                    |
| `keySalt`        | string  | Schlüssel zur Herleitung des Salts.                      |
| `tag`            | string  | Auth-Token zur Authentizitätsprüfung (nur bei `aesgcm`). |

**Parameter**

| **Name**           | **Typ** | **Pflicht** | **Beschreibung**                                                                                                                                                                                                                                                      |
| ------------------ | ------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`               | string  | ja          | ID der Verschlüsselungskonfiguration aus `security.method.encrypt`.                                                                                                                                                                                                   |
| `data`             | string  | ja          | Zu verschlüsselnde Daten.                                                                                                                                                                                                                                             |
| `encryptionMethod` | string  | ja          | Verschlüsselungsmethode.   <br />Mögliche Werte:  <br />- `blowfish` - Blowfish Blockchiffre im ECB-Modus. <br />- `aescbc` - AES Blockchiffre im CBC-Modus. <br />- `aesgcm` - AES Blockchiffre im GCM-Modus. <br />- `tdes` - Triple DES Blockchiffre im CBC-Modus. |
| `encoding`         | string  | ja          | Ausgabe-Encoding: `hex` oder `base64`.                                                                                                                                                                                                                                |

Beispiel, das Daten verschlüsselt und einzeln verwendet:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $myResult = $wsSecurity.encryptManual("token_v1", "Sensible Daten", "aesgcm", "hex") }}
Ciphertext: {{= $myResult.ciphertext }}
Salt: {{= $myResult.keySalt }}
Tag: {{= $myResult.tag }}
```

### \$wsSecurity.hash()

Berechnet einen kryptografischen Hash-Wert der Eingabedaten. Hash-Werte sind Einweg-Verschlüsselungen – sie können nicht zurück in die Originaldaten umgewandelt werden. Typischer Anwendungsfall: Passwort-Speicherung.

**Signatur**\
`$wsSecurity.hash(id, data, hashingMethod, encoding)`

**Rückgabe**\
`string` - Hash-Wert der Daten.

**Parameter**

| **Name**        | **Typ** | **Pflicht** | **Beschreibung**                                      |
| --------------- | ------- | ----------- | ----------------------------------------------------- |
| `id`            | string  | ja          | ID der Hash-Konfiguration aus `security.method.hash`. |
| `data`          | string  | ja          | Zu hashende Daten.                                    |
| `hashingMethod` | string  | ja          | Hash-Methode: `sha256` oder `sha512`.                 |
| `encoding`      | string  | ja          | Ausgabe-Encoding: `hex` oder `base64`.                |

**Beispiel,** das ein Passwort mit einem konfigurierten Verfahren hasht.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $myHashedPassword = $wsSecurity.hash("password_v1", $userPassword) }}
```

***

## Aktionen

Für `$wsSecurity` stehen keine Aktionen zur Verfügung. Die Verschlüsselung und das Hashing erfolgen direkt über die Methoden des Moduls.

***

## Beispiele

In diesem Beispiel werden sensible Daten verschlüsselt und später wieder entschlüsselt.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $encrypted = $wsSecurity.encrypt("token_v1", "Geheime Nachricht", "aesgcm", "base64") }}

{{ var $decrypted = $wsSecurity.decrypt($encrypted) }}
```

### Passwort hashen

In diesem Beispiel wird ein Passwort gehasht. Der Hash-Wert kann später mit einem erneut gehashten Passwort verglichen werden.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $hashedPassword = $wsSecurity.hash("password_v1", $password, "sha256", "hex") }}
```

***

## Weiterführende Links

* [security - Sicherheitsregeln](/konfiguration/security-sicherheitsregeln)
