# Κρυπτογράφηση και αποκρυπτογράφηση δεδομένων με κλειδί

> Μετατρέψτε αντικείμενα σε αδιαφανή tokens με ENCRYPT() και διαβάστε τα πίσω με DECRYPT(), για υπογεγραμμένους συνδέσμους και βραχύβια tokens.

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

Το `ENCRYPT(value, key)` σειριοποιεί μια τιμή σε JSON και επιστρέφει ένα αδιαφανές κείμενο. Το `DECRYPT(text, key)` επιστρέφει την αρχική τιμή ή `null` όταν το κείμενο άλλαξε, δεν είναι έγκυρο ή κρυπτογραφήθηκε με άλλο κλειδί. Η ρύθμιση `secret` του config σας αναμειγνύεται στο κλειδί, ώστε tokens που δημιουργήθηκαν σε μία εγκατάσταση να μην ανοίγουν σε άλλη.

Χρησιμοποιήστε το για συνδέσμους επαναφοράς κωδικού, tokens πρόσκλησης και ό,τι δίνετε σε έναν client και επαληθεύετε αργότερα χωρίς να το αποθηκεύσετε. Βάλτε μια λήξη μέσα στην τιμή (μια χρονοσφραγίδα) και ελέγξτε την μετά την αποκρυπτογράφηση.

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