Encryption

Giới thiệu

Encrypter của Laravel sử dụng OpenSSL để cung cấp mã hóa AES-256 và AES-128. Bạn nên sử dụng mã hóa của Laravel được xây dựng trong thuật toán mã hóa. Tất cả giá trị mã hóa của Laravel được đăng ký sử dụng một mã (MAC) để phát hiện chỉnh sửa ở chuỗi được mã hóa.

Cấu hình

Trước khi sử dụng mã hõa của Laravel, bạn phải đặt một key trong file cấu hình config/app.php. Bạn có dùng lệnh php artisan key:generate để tạo ra key này vì lệnh Artisan command sẽ sử dụng secure random bytes của PHP để tạo ra key. Nếu giá trị này không được đặt, tất cả mã hóa của Laravel sẽ không an toàn.

Sử dụng encrypter

Giá trị của một encrypting

Bạn có thể mã hoá một giá trị sử dụng enrypt. Tất cả các giá trị được mã hoá sử dụng OpenSSL và thuật toán AES-256-CBC cipher. Thêm nữa, các giá trị này được kí với mã MAC (Message Authetication Code) để phát hiện chỉnh sửa ở chuỗi đã được mã hoá:

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * Store a secret message for the user.
     *
     * @param    Request  $request
     * @param    int  $id
     * @return  Response
     */
    public function storeSecret(Request $request, $id)
    {
        $user = User::findOrFail($id);

        $user->fill([
            'secret' => encrypt($request->secret)
        ])->save();
    }
}

Các giá trị được mã hoá sẽ truyền vào serialize trong quá trình mã hóa, nó có thể mã hóa đối tượng và mảng. Vì vậy, các phía nhận giá trị mã hoá không phải từ PHP thì sẽ cần phải unserialize dữ liệu.

Giải mã một giá trị

Bạn có thể giải mã bằng phương thức decrypt. Nếu như giá trị không thể giải mã hoàn chỉnh, ví dụ như mã MAC là không hợp lệ, thì một ngoại lệ Illuminate\Contracts\Encryption\DecryptException sẽ được ném ra:

use Illuminate\Contracts\Encryption\DecryptException;

try {
    $decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
    //
}
Nguồn: https://laravel.com/docs/5.3/encryption