# Daten mit einem Schlüssel ver- und entschlüsseln

> Verwandle Objekte mit ENCRYPT() in undurchsichtige Tokens und lies sie mit DECRYPT() zurück, für signierte Links und kurzlebige Tokens.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: de
Content-SHA256: 2215aeee0f9ac3b374aca61da5c93927aaad1563bb6d04e2ae2f634a3429bf19
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`ENCRYPT(value, key)` serialisiert einen Wert zu JSON und gibt einen undurchsichtigen Text zurück. `DECRYPT(text, key)` liefert den Originalwert, oder `null`, wenn der Text verändert wurde, ungültig ist oder mit einem anderen Schlüssel verschlüsselt wurde. Die Einstellung `secret` deiner Config fließt in den Schlüssel ein, sodass auf einer Installation erzeugte Tokens auf einer anderen nicht funktionieren.

Nutze es für Links zum Zurücksetzen des Passworts, Einladungs-Tokens und alles, was du an einen Client gibst und später prüfen willst, ohne es zu speichern. Lege ein Ablaufdatum (einen Zeitstempel) in den Wert und prüfe es nach dem Entschlüsseln.

```text config
secret : change-this-secret-in-production
```

```js controllers/tokens.js
exports.install = function() {
	ROUTE('GET /token/', create);
	ROUTE('GET /verify/', verify);
};

function create($) {
	var token = ENCRYPT({ userid: '123', expire: Date.now() + 60000 }, 'reset-password');
	$.json({ token: token });
}

function verify($) {

	var data = DECRYPT($.query.token || '', 'reset-password');

	if (!data || data.expire < Date.now()) {
		$.invalid(401);
		return;
	}

	$.json({ userid: data.userid });
}
```
