Mã hóa là một quá trình chuyển đổi một văn bản thuần túy thành một tin nhắn bằng cách sử dụng một số thuật toán mà bất kỳ người dùng thứ ba nào cũng không thể đọc được thông tin. Điều này rất hữu ích cho việc truyền thông tin nhạy cảm vì có ít cơ hội cho kẻ xâm nhập nhắm mục tiêu thông tin được chuyển hơn.
Mã hóa được thực hiện bằng một quá trình gọi là Cryptography . Văn bản sẽ được mã hóa được gọi là Văn bản thuần túy và văn bản hoặc tin nhắn thu được sau khi mã hóa được gọi là Văn bản mật mã . Quá trình chuyển đổi văn bản mật mã sang văn bản thuần túy được gọi là Giải mã .
Laravel sử dụng mã hóa AES-256 và AES-128 , sử dụng Open SSL để mã hóa. Tất cả các giá trị có trong Laravel đều được ký bằng cách sử dụng Mã xác thực thông báo giao thức để giá trị cơ bản không thể bị giả mạo khi nó được mã hóa.
Cấu hình
Lệnh được sử dụng để tạo khóa trong Laravel được hiển thị bên dưới:
php artisan
key:generate
Xin lưu ý rằng lệnh này sử dụng trình tạo byte ngẫu nhiên an toàn của PHP và bạn có thể thấy đầu ra như được hiển thị trong ảnh chụp màn hình bên dưới:
Lệnh được đưa ra ở trên giúp tạo khóa có thể được sử dụng trong ứng dụng web. Quan sát ảnh chụp màn hình được hiển thị bên dưới –
Ghi chú
Các giá trị mã hóa được căn chỉnh chính xác trong tệp config / app.php , bao gồm hai tham số để mã hóa là khóa và mật mã . Nếu giá trị sử dụng khóa này không được căn chỉnh đúng, tất cả các giá trị được mã hóa trong Laravel sẽ không an toàn.
Quy trình mã hóa
Mã hóa một giá trị có thể được thực hiện bằng cách sử dụng trình trợ giúp mã hóa trong bộ điều khiển của lớp Laravel. Các giá trị này được mã hóa bằng OpenSSL và AES-256 cipher. Tất cả các giá trị được mã hóa được ký bằng mã Xác thực Thư (MAC) để kiểm tra bất kỳ sửa đổi nào của chuỗi được mã hóa.
Đoạn mã hiển thị bên dưới được đề cập trong một bộ điều khiển và được sử dụng để lưu trữ bí mật hoặc tin nhắn nhạy cảm.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class DemoController 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();
}
}
Quy trình giải mã
Việc giải mã các giá trị được thực hiện với trình trợ giúp giải mã . Quan sát các dòng mã sau:
use Illuminate\Contracts\Encryption\DecryptException;
// Exception for decryption thrown in facade
try {
$decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}
Xin lưu ý rằng nếu quá trình giải mã không thành công do MAC không hợp lệ đang được sử dụng, thì một ngoại lệ thích hợp sẽ được ném ra.