{{TOC}} Иногда вам нужно защитить свои данные. В Laravel для этого есть два метода: одностороннее и двустороннее шифрование. Посмотрим на них подробнее. == Одностороннее шифрование == **Одностороннее шифрование** - лучший способ для сохранения паролей или других важных пользовательских данных. "Одностороннее" значит, что вы можете преобразовать данные в зашифрованную строку, но благодаря запутанным алгоритмам и высшей математике обратное преобразование не возможно. С помощью этого вы можете легко хранить пароли ваших пользователей - им не нужно волноваться о том, что вы знаете их пароли, но в то же время вы можете проверить правильность ввода просто сравнив **хэш** введённого пароля с сохранённым в БД, а также можете при необходимости изменить пароль. **Хэширование** - процесс создания //хэш-последовательности// ищ исходной строки (!!(tl_note) например, //((http://i-tools.org/hash/exec?data[direct]=hello MD5-хэш))// для строки "hello" выглядит как %%(t) 5D41402ABC4B2A76B9719D911017C592%% - //прим. пер.//!!). Посмотрим, как это работает с паролями: %% $pass = Input::get('password'); %% Здесь мы получили пароль из формы, введённой пользователем, но он в виде простого текста. Давайте зашифруем его для безопасного хранения в БД: %% $pass = Hash::make($pass); %% Мы использовали один из тех выразительных методов, которыми гордится Laravel - на этот раз создав объект **Hash**. Теперь %%$pass%% содержит пароль, зашифрованный с помощью //((WP:bcrypt))//. Допустим, теперь пользователь ввёл пароль в форме авторизации и нам теперь нужно посмотреть, верен ли он или нет. Мы можем сравнить пароль с его //хэшем//, хранящимся в БД с помощью метода **check()**: %% $pass = Input::get('password'); if (Hash::check($pass, $user->password)) { // успешная авторизация. } %% Метод **check()** принимает **два параметра**: пароль в чистом виде, как его ввёл пользователь и //хэш//, сохранённый в вашей базе данных и возвращает **true**, если они совпадают. Что нам делать, если мы захотим //расшифровать// наши данные позже? Посмотрим, как это происходит при использовании двустороннего шифрования. == Двустороннее шифрование == **Двустороннее шифрование** позволяет вам извлечь исходные данные из зашифрованной строки - примерно так, как на тех зашифрованных листах бумаги, с которыми вы играли, когда были ребёнком. В Laravel есть класс **Crypter**, использующий алгоритм //((ВП:AES-256))//, предоставляемый расширением **((phpdoc:book.mcrypt MCrypt))** для PHP, поэтому оно требуется для его работы. Класс %%Crypter%% имеет два простых метода: **encrypt()** и **decrypt()**. Посмотрим, как с их помощью можно закодировать строку: %% $secret = Crypter::encrypt('I actually like Hello Kitty'); %% Теперь наш маленький секрет надёжно упрятан под защитой //AES-256//; в результате мы получили зашифрованную строку - но она нам ни к чему, если бы мы не могли раскодировать её позднее. Посмотрим, как это делается: %% $decrypted_secret = Crypter::decrypt($secret); %% Ничего проще! Просто передайте закодированную строку в %%decrypt()%% и вы получите расшифрованный результат. .(tl_note) **Внимание:** двустороннее шифрование зависит от ключа, указанного в настройке **key** файла **application/config/application.php** - это значит, что после установки приложения вам **обязательно нужно его сменить** (иначе любой сможет расшифровать ваши данные, используя умолчательный пароль Laravel). Кроме того, при изменении этого ключа вы больше не сможете раскодировать зашифрованные ранее данные. - //прим. пер.//!!