Обязательные курсы на стороне сервера: шифрование, дешифрование и хеширование

задняя часть Архитектура
Обязательные курсы на стороне сервера: шифрование, дешифрование и хеширование

«Это 20-й день моего участия в ноябрьском испытании обновлений. Подробную информацию об этом событии см.:Вызов последнего обновления 2021 г."

Шифрование и дешифрование, а также алгоритм хэширования являются обязательными курсами для разработки серверов.

Я собрал статью о симметричном шифровании и асимметричном шифровании и о том, как его использовать в проекте раньше, и отклик не плохой.

Заинтересованные студенты могут просмотретьОбратитесь к идеям шифрования и дешифрования https, чтобы реализовать безопасность, согласованность и защиту от несанкционированного доступа при передаче данных ваших собственных сетевых запросов. (симметричное шифрование + асимметричное шифрование)

Сегодня я разберу точки знаний, связанные с алгоритмами шифрования, дешифрования и хеширования Laravel.

шифровать и декодировать

вводить

Механизм шифрования Laravel использует шифрование AES-256 и AES-128, предоставляемое OpenSSL.

Рекомендуется использовать встроенные инструменты шифрования Laravel вместо других алгоритмов шифрования.

Все зашифрованные результаты Laravel подписываются кодом аутентификации сообщения (MAC), чтобы базовое значение не могло быть изменено снова после шифрования.

настроить

Прежде чем использовать инструмент шифрования Laravel, мы должны сначала установить элемент конфигурации ключа в файле конфигурации config/app.php.

Этот элемент конфигурации задается переменной среды APP_KEY.

должен быть использованphp artisan key:generateкоманда для генерации значения переменной

Обоснование: команда key:generate будет использовать безопасный генератор случайных байтов PHP для создания криптографически безопасного ключа для вашего приложения.

Основное использование

зашифровать значение

Мы можем зашифровать значение, используя encryptString, предоставляемое фасадом Crypt.

Все зашифрованные значения шифруются с использованием OpenSSL AES-256-CBC.

Кроме того, все зашифрованные значения подписываются кодом аутентификации сообщения (MAC), чтобы определить, была ли подделана зашифрованная строка:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;

class DigitalOceanTokenController extends Controller
{
    /**
     * 为用户存储一个 DigitalOcean API 令牌
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function storeSecret(Request $request)
    {
        $request->user()->fill([
            'token' => Crypt::encryptString($request->token),
        ])->save();
    }
}

расшифровать значение

Мы можем расшифровать с помощью decryptString, предоставляемого фасадом Crypt.

Выдает исключение, если значение не может быть правильно расшифровано, например, если код аутентификации сообщения (MAC) недействителен.

Illuminate\Contracts\Encryption\DecryptException:

use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;

try {
    $decrypted = Crypt::decryptString($encryptedValue);
} catch (DecryptException $e) {
    //
}

хэш

вводить

Фасад Laravel Hash обеспечивает безопасное хэш-шифрование Bcrypt и Argon2 для хранения паролей пользователей.

如果我们正在使用 Laravel 应用初始脚手架 ,默认情况下,将使用 Bcrypt 进行注册和身份验证。

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

Уведомление:加密密码时速度慢是相对比较好的。

Чем больше времени требуется алгоритму для хеширования паролей, тем больше времени потребуется злоумышленнику для создания «радужной таблицы» всех строковых хэшей, которые потенциально могут быть использованы для взлома приложения.

настроить

Мы можем настроить драйвер хеширования по умолчанию в файле конфигурации config/hashing.php.

В настоящее время поддерживаются три драйвера: Bcrypt и Argon2 (варианты Argon2i и Argon2id).

Примечание. Для драйвера Argon2i требуется PHP 7.2.0 или выше, а для драйвера Argon2id требуется PHP 7.3.0 или выше.

основное использование

хэш-пароль

Мы можем зашифровать ваш пароль, вызвав метод make на фасаде Hash:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class PasswordController extends Controller
{
    /**
     * Update the password for the user.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request)
    {
        // Validate the new password length...

        $request->user()->fill([
            'password' => Hash::make($request->newPassword)
        ])->save();
    }
}

Настройте коэффициент шифрования Bcrypt

Если вы используете алгоритм Bcrypt, вы можете использовать опцию rounds в методе make, чтобы настроить коэффициенты шифрования для этого алгоритма. Однако для большинства приложений достаточно значений по умолчанию:

$hashed = Hash::make('password', [
    'rounds' => 12,
]);

Отрегулируйте коэффициент шифрования Argon2

При использовании алгоритма Argon2 мы можем использовать параметры памяти, времени и потоков в методе make для настройки коэффициентов шифрования этого алгоритма.

Для большинства приложений достаточно значений по умолчанию:

$hashed = Hash::make('password', [
    'memory' => 1024,
    'time' => 2,
    'threads' => 2,
]);

Хэширование пароля/проверка хэша

Метод проверки может проверить для нас, что данная незашифрованная строка соответствует заданному хэшу/хеш-значению:

if (Hash::check('xxxx', $hashedPassword)) {
    // 密码匹配……
}

Проверьте, нужно ли перефразировать/хешировать пароль

Метод needRehash может проверить, был ли ваш пароль повторно зашифрован с новым коэффициентом шифрования при изменении коэффициента шифрования хеша/хэша. Некоторые приложения выполняют эту проверку во время аутентификации:

if (Hash::needsRehash($hashed)) {
    $hashed = Hash::make('plain-text');
}

Суммировать

Будь то требования политики или технические требования, обеспечение безопасности данных и защита конфиденциальности пользователей являются отраслевыми тенденциями.

Мы должны помнить о безопасности данных, овладевать знаниями в области шифрования и дешифрования и обеспечивать безопасность данных.

Наконец

Приглашаю всех обратить внимание на мой публичный аккаунт в WeChat: Программист прокачивает и сражается с монстрами

Также приглашаю подписаться на мою колонкуСервер от входа до мастерства, организует краткое изложение разработки на стороне сервера на простом языке, в том числе: Go Java Php

Если у вас есть какие-либо вопросы, вы можете добавить мой WeChat для общения, аккаунт WeChat:wangzhongyang0601.

👍🏻: Если вы считаете, что что-то получили, пожалуйста, поставьте лайк и поддержите!

🌟: Любимые статьи для удобного просмотра!

💬: Обменивайтесь комментариями и развивайтесь друг с другом!