Может войдёшь?
Черновики Написать статью Профиль

Защита данных - шифрование в Laravel

перевод

  1. 1. Одностороннее шифрование
  2. 2. Двустороннее шифрование

Иногда вам нужно защитить свои данные. В Laravel для этого есть два метода: одностороннее и двустороннее шифрование. Посмотрим на них подробнее.

Одностороннее шифрование

Одностороннее шифрование — лучший способ для сохранения паролей или других важных пользовательских данных. «Одностороннее» значит, что вы можете преобразовать данные в зашифрованную строку, но благодаря запутанным алгоритмам и высшей математике обратное преобразование не возможно.

С помощью этого вы можете легко хранить пароли ваших пользователей — им не нужно волноваться о том, что вы знаете их пароли, но в то же время вы можете проверить правильность ввода просто сравнив хэш введённого пароля с сохранённым в БД, а также можете при необходимости изменить пароль.

Хэширование — процесс создания хэш-последовательности ищ исходной строки (например, MD5-хэш для строки «hello» выглядит как 5D41402ABC4B2A76B9719D911017C592прим. пер.).

Посмотрим, как это работает с паролями:

PHP
$pass Input::get('password');

Здесь мы получили пароль из формы, введённой пользователем, но он в виде простого текста. Давайте зашифруем его для безопасного хранения в БД:

PHP
$pass Hash::make($pass);

Мы использовали один из тех выразительных методов, которыми гордится Laravel — на этот раз создав объект Hash. Теперь PHP$pass содержит пароль, зашифрованный с помощью bcrypt.

Допустим, теперь пользователь ввёл пароль в форме авторизации и нам теперь нужно посмотреть, верен ли он или нет. Мы можем сравнить пароль с его хэшем, хранящимся в БД с помощью метода check():

PHP
$pass Input::get('password');
if (
Hash::check($pass$user->password)) {
  
// успешная авторизация.
}

Метод check() принимает два параметра: пароль в чистом виде, как его ввёл пользователь и хэш, сохранённый в вашей базе данных и возвращает true, если они совпадают.

Что нам делать, если мы захотим расшифровать наши данные позже? Посмотрим, как это происходит при использовании двустороннего шифрования.

Двустороннее шифрование

Двустороннее шифрование позволяет вам извлечь исходные данные из зашифрованной строки — примерно так, как на тех зашифрованных листах бумаги, с которыми вы играли, когда были ребёнком.

В Laravel есть класс Crypter, использующий алгоритм AES-256, предоставляемый расширением MCrypt для PHP, поэтому оно требуется для его работы.

Класс PHPCrypter имеет два простых метода: encrypt() и decrypt(). Посмотрим, как с их помощью можно закодировать строку:

PHP
$secret Crypter::encrypt('I actually like Hello Kitty');

Теперь наш маленький секрет надёжно упрятан под защитой AES-256; в результате мы получили зашифрованную строку — но она нам ни к чему, если бы мы не могли раскодировать её позднее. Посмотрим, как это делается:

PHP
$decrypted_secret Crypter::decrypt($secret);

Ничего проще! Просто передайте закодированную строку в PHPdecrypt() и вы получите расшифрованный результат.

Внимание: двустороннее шифрование зависит от ключа, указанного в настройке key файла application/config/application.php — это значит, что после установки приложения вам обязательно нужно его сменить (иначе любой сможет расшифровать ваши данные, используя умолчательный пароль Laravel). Кроме того, при изменении этого ключа вы больше не сможете раскодировать зашифрованные ранее данные. — прим. пер.!!

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.