# Gegevens met een sleutel versleutelen en ontsleutelen

> Zet objecten om in ondoorzichtige tokens met ENCRYPT() en lees ze terug met DECRYPT(), voor ondertekende links en kortlevende tokens.

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

`ENCRYPT(value, key)` serialiseert een waarde naar JSON en geeft een ondoorzichtige tekst terug. `DECRYPT(text, key)` geeft de oorspronkelijke waarde terug, of `null` wanneer de tekst is gewijzigd, ongeldig is of met een andere sleutel is versleuteld. De instelling `secret` van je config wordt door de sleutel gemengd, zodat tokens uit de ene installatie in een andere niet openen.

Gebruik het voor links om wachtwoorden te resetten, uitnodigingstokens en alles wat je aan een client geeft en later wilt controleren zonder het op te slaan. Zet een verlooptijd (een tijdstempel) in de waarde en controleer die na het ontsleutelen.

```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 });
}
```
