# Kryptera och dekryptera data med en nyckel

> Förvandla objekt till ogenomskinliga tokens med ENCRYPT() och läs tillbaka dem med DECRYPT(), för signerade länkar och kortlivade tokens.

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

`ENCRYPT(value, key)` serialiserar ett värde till JSON och returnerar en ogenomskinlig text. `DECRYPT(text, key)` returnerar det ursprungliga värdet, eller `null` när texten har ändrats, inte är giltig eller krypterades med en annan nyckel. Inställningen `secret` i din config blandas in i nyckeln, så tokens skapade på en installation öppnas inte på en annan.

Använd det för länkar för återställning av lösenord, inbjudningstokens och allt du lämnar till en klient och verifierar senare utan att lagra det. Lägg en utgångstid (en tidsstämpel) i värdet och kontrollera den efter dekrypteringen.

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