Иногда вам нужно защитить свои данные. В Laravel для этого есть два метода: одностороннее и двустороннее шифрование. Посмотрим на них подробнее.
Одностороннее шифрование
Одностороннее шифрование — лучший способ для сохранения паролей или других важных пользовательских данных. «Одностороннее» значит, что вы можете преобразовать данные в зашифрованную строку, но благодаря запутанным алгоритмам и высшей математике обратное преобразование не возможно.
С помощью этого вы можете легко хранить пароли ваших пользователей — им не нужно волноваться о том, что вы знаете их пароли, но в то же время вы можете проверить правильность ввода просто сравнив хэш введённого пароля с сохранённым в БД, а также можете при необходимости изменить пароль.
Хэширование — процесс создания хэш-последовательности ищ исходной строки (например, MD5-хэш для строки «hello» выглядит как 5D41402ABC4B2A76B9719D911017C592 — прим. пер.).
Посмотрим, как это работает с паролями:
$pass = Input::get('password');
Здесь мы получили пароль из формы, введённой пользователем, но он в виде простого текста. Давайте зашифруем его для безопасного хранения в БД:
$pass = Hash::make($pass);
Мы использовали один из тех выразительных методов, которыми гордится Laravel — на этот раз создав объект Hash. Теперь PHP$pass
содержит пароль, зашифрованный с помощью bcrypt.
Допустим, теперь пользователь ввёл пароль в форме авторизации и нам теперь нужно посмотреть, верен ли он или нет. Мы можем сравнить пароль с его хэшем, хранящимся в БД с помощью метода check():
$pass = Input::get('password');
if (Hash::check($pass, $user->password)) {
// успешная авторизация.
}
Метод check() принимает два параметра: пароль в чистом виде, как его ввёл пользователь и хэш, сохранённый в вашей базе данных и возвращает true, если они совпадают.
Что нам делать, если мы захотим расшифровать наши данные позже? Посмотрим, как это происходит при использовании двустороннего шифрования.
Двустороннее шифрование
Двустороннее шифрование позволяет вам извлечь исходные данные из зашифрованной строки — примерно так, как на тех зашифрованных листах бумаги, с которыми вы играли, когда были ребёнком.
В Laravel есть класс Crypter, использующий алгоритм AES-256, предоставляемый расширением MCrypt для PHP, поэтому оно требуется для его работы.
Класс PHPCrypter
имеет два простых метода: encrypt() и decrypt(). Посмотрим, как с их помощью можно закодировать строку:
$secret = Crypter::encrypt('I actually like Hello Kitty');
Теперь наш маленький секрет надёжно упрятан под защитой AES-256; в результате мы получили зашифрованную строку — но она нам ни к чему, если бы мы не могли раскодировать её позднее. Посмотрим, как это делается:
$decrypted_secret = Crypter::decrypt($secret);
Ничего проще! Просто передайте закодированную строку в PHPdecrypt()
и вы получите расшифрованный результат.
Внимание: двустороннее шифрование зависит от ключа, указанного в настройке key файла application/config/application.php — это значит, что после установки приложения вам обязательно нужно его сменить (иначе любой сможет расшифровать ваши данные, используя умолчательный пароль Laravel). Кроме того, при изменении этого ключа вы больше не сможете раскодировать зашифрованные ранее данные. — прим. пер.!!
Комментарии (1)
Замечательная статья.
Мне помогла!
Авторам большое спасибо! :)