Bcrypt vs Hash in laravel

Я хочу создать функцию или что-то вроде Cron, которая выполняет ссылку (в Laravel) с чем-то вроде пароля. У меня есть два решения. Но какой из них лучше использовать:

Вариант 1 (хеш):

<?php

// Page 1

$salt = "my-random-hash";
$key = hash('sha256', date('Y-m-d').$salt);

// <-- Insert go to page and send GET with $key code here

// Page 2

$salt = "my-random-hash";
$key = hash('sha256', date('Y-m-d').$salt);

if ($key == $pageOneKey) {
// Execute some code
}

Вариант 2 (bcrypt):

<?php

// Page 1

$key = Crypt::encrypt(date('Y-m-d'));

// <-- Insert go to page and send GET with $key code here

// Page 2

$key = date('Y-m-d');
$pageOneKey = Crypt::decrypt($key);

if ($key == $pageOneKey) {
// Execute some code
}

Этот код был широко описан. Лучше использовать, я имею в виду более безопасный / более безопасный, или что-то в этом трансе. Спасибо!

7

Решение

Ваш второй вариант не bcrypt. Laravel-х Crypt Класс использует шифрование AES.
Как указано в документации:

Laravel предоставляет средства для надежного шифрования AES через расширение Mcrypt PHP.

Насколько я могу судить, вам не нужно иметь возможность расшифровывать данные, чтобы полностью изменить шифрование. Поэтому вам обязательно следует использовать алгоритм хеширования, такой как sha256, в первом варианте. Однако Laravel уже поставляется с довольно хорошим классом хэширования, так почему бы не использовать это.

Вариант 3 (Laravel HashBcrypt)

$hash = Hash::make('secret');

$input = 'secret';
if(Hash::check($input, $hash)){
// the input matches the secret
}

Заметка что вы должны использовать Hash::check() для сравнения. Вы не можете просто создать еще один хеш с Hash::make() и сравни их. Сгенерированный хеш содержит случайный компонент, поэтому, даже если это тот же секрет, Hash::make() будет каждый раз создавать новый хэш.

Хеширование — Laravel docs

10

Другие решения

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

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

1