Mã hóa là một quá trình chuyển đổi văn bản thuần túy thành tin nhắn bằng một số thuật toán sao cho 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 hữu ích cho việc truyền thông tin nhạy cảm vì có ít cơ hội hơn cho kẻ xâm nhập nhắm mục tiêu thông tin được truyền
Mã hóa được thực hiện bằng một quy trình gọi là Mật mã. Văn bản cần mã hóa được gọi là Văn bản thuần túy và văn bản hoặc thông báo 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 Openssl để 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ư giao thức để giá trị cơ bản không thể bị giả mạo sau khi đượ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ư trong ảnh chụp màn hình bên dưới -
Lệnh đư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 hiển thị bên dưới -
Ghi chú
Các giá trị cho mã hóa được căn chỉnh chính xác trong cấu hình/ứng dụng. 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 chính xác, tất cả các giá trị được mã hóa trong Laravel sẽ không an toàn
Quá trình mã hóa
Việc 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 mật mã OpenSSL và AES-256. 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 mọi sửa đổi của chuỗi được mã hóa
Mã hiển thị bên dưới được đề cập trong bộ điều khiển và được sử dụng để lưu trữ một thông báo bí mật hoặc nhạy cảm
fill[[ 'secret' => encrypt[$request->secret] ]]->save[]; } }
Quá 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 sử dụng MAC không hợp lệ, thì một ngoại lệ thích hợp sẽ được đưa ra
Mã hóa đã được sử dụng từ lâu trước khi máy tính được phát minh;
Một kỹ thuật mã hóa rất phổ biến khác là mật mã Caesar. Đây là một trong những kỹ thuật đơn giản nhất và cách thức hoạt động của nó là mỗi chữ cái của văn bản được thay thế bằng một số vị trí cụ thể trong bảng chữ cái
Mặt khác, Laravel cung cấp mã hóa vượt trội, sử dụng OpenSSL để cung cấp mã hóa AES-256 để bạn không thực sự phải nghĩ ra các kỹ thuật mã hóa của riêng mình
Trong hướng dẫn này, bạn sẽ học cách sử dụng mã hóa Laravel để mã hóa văn bản
điều kiện tiên quyết
Trước khi bắt đầu, bạn cần cài đặt và chạy ứng dụng Laravel
Tôi sẽ sử dụng DigitalOcean Ubuntu Droplet cho bản demo này. Nếu muốn, bạn có thể sử dụng mã liên kết của tôi để nhận khoản tín dụng DigitalOcean trị giá 100 đô la miễn phí để khởi động máy chủ của riêng bạn
Nếu bạn chưa có, bạn có thể làm theo các bước từ hướng dẫn này về cách thực hiện điều đó
- Cách cài đặt Laravel trên DigitalOcean với 1 cú nhấp chuột
Hoặc bạn có thể sử dụng tập lệnh tuyệt vời này để thực hiện cài đặt
🤩 Nhà tài trợ tuyệt vời của chúng tôi 👇
Xem trang web
DigitalOcean cung cấp giải pháp lưu trữ đám mây đơn giản và đáng tin cậy cho phép các nhà phát triển nhanh chóng thiết lập và chạy trang web hoặc ứng dụng của họXem trang web
Bảng công việc chính thức của Laravel. Tìm các nhà phát triển Laravel giỏi nhất và tài năng nhất bằng cách đăng công việc của bạn trên bảng việc làm chính thức của LaravelXem trang web
Tìm hiểu cách viết mã chuỗi khối của riêng bạn và tạo tiền điện tử của riêng bạn với nền tảng đào tạo trực tuyến thú vị và tương tác CoinCap. Tìm hiểu thêm về chương trình tài trợ DevDojo và xem biểu trưng của bạn tại đây để đưa thương hiệu của bạn đến với hàng nghìn nhà phát triển.- larabuồm
Cấu hình khóa ứng dụng
Trước khi bắt đầu, bạn cần đảm bảo rằng bạn đã tạo Khóa ứng dụng
Nếu bạn chưa tạo khóa, để làm điều đó, bạn có thể chạy lệnh sau
php artisan key:generate
Mã hóa Laravel sẽ vẫn hoạt động mà không cần khóa, nhưng các giá trị được mã hóa có thể không an toàn
Tạo một tuyến đường
Bây giờ chúng ta đã có Khóa ứng dụng sẵn sàng, hãy tiếp tục và tạo hai route, một để kiểm tra mã hóa Laravel và một để kiểm tra giải mã Laravel
Để làm điều đó, hãy mở tệp routes/web.php
và thêm vào như sau
Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
Tuyến đầu tiên là tuyến /encrypt
, tuyến này sẽ tạo ra một chuỗi được mã hóa cho chúng ta và tuyến thứ hai sẽ giải mã chuỗi đó
Cùng với đó, hãy tạo bộ điều khiển EncryptionController
Tạo bộ điều khiển
Đối với ví dụ này, hãy tạo một bộ điều khiển mới có tên là EncryptionController
php artisan make:controller EncryptionController
Điều này sẽ tạo một bộ điều khiển mới tại.
Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
0Tiếp theo, mở tệp đó trong trình soạn thảo văn bản của bạn và trước tiên thêm mặt tiền
Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
1Sau đó, hãy tạo hai phương thức công khai mới. một để mã hóa một chuỗi và một để giải mã cùng một chuỗi đó được gọi là
Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
2 và Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
3phương pháp mã hóa
Hãy bắt đầu với một phương thức Mã hóa đơn giản sẽ mã hóa một chuỗi được mã hóa cứng cho chúng tôi
public function encrypt[]
{
$encrypted = Crypt::encryptString['Hello DevDojo'];
print_r[$encrypted];
}
Sơ lược về phương pháp
4. đầu tiên chúng ta định nghĩa phương thứcRoute::get['encrypt', EncryptionController@encrypt']; Route::get['decrypt', EncryptionController@decrypt'];
5. sau đó sử dụng phương thức tĩnhRoute::get['encrypt', EncryptionController@encrypt']; Route::get['decrypt', EncryptionController@decrypt'];
6, chúng tôi mã hóa một chuỗiRoute::get['encrypt', EncryptionController@encrypt']; Route::get['decrypt', EncryptionController@decrypt'];
7 đơn giảnRoute::get['encrypt', EncryptionController@encrypt']; Route::get['decrypt', EncryptionController@decrypt'];
8. cuối cùng, chúng tôi sẽ in ra chuỗi mã hóa trên màn hìnhRoute::get['encrypt', EncryptionController@encrypt']; Route::get['decrypt', EncryptionController@decrypt'];
Sau lần truy cập đó, URL /encrypt
thông qua trình duyệt của bạn và bạn sẽ thấy một chuỗi được mã hóa tương tự chuỗi này
string[188] "eyJpdiI6ImxSdGhkeVg2VHlCNUs0citKT0V4NHc9PSIsInZhbHVlIjoiSEM5V0pVWURySnVabGlnenNwTDgzUT09IiwibWFjIjoiZTJlYWVhYmI2OTJmZWJkZWVhOTg3Nzc1ZTQwNDBlNmI3ODIzZTY5YTgwZGM3N2YwYTRmYTEwYmJiYmNjZmE2NiJ9"
Ghi lại chuỗi này và quay lại trình soạn thảo văn bản của bạn để chuẩn bị phương pháp
Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
3phương pháp giải mã
Sau đó, tạo một phương thức công khai mới có tên là
Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
3 public function decrypt[]
{
$decrypt= Crypt::decryptString['your_encrypted_string_here'];
print_r[$decrypt];
}
Ghi chú
Đảm bảo thay đổi
2 bằng chuỗi được mã hóa thực tế mà bạn đã nhận được từ bước cuối cùngphp artisan make:controller EncryptionController
Tương tự như phương thức Encrypt, chúng ta lại sử dụng phương thức tĩnh
Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
1 đối mặt với phương thức tĩnh php artisan make:controller EncryptionController
4 để giải mã chuỗiSau đó, lần này hãy truy cập URL
php artisan make:controller EncryptionController
5 trong trình duyệt của bạn và bạn sẽ thấy thông báo Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
7 đã được giải mãTất nhiên, ví dụ trên chỉ hiển thị chức năng
Route::get['encrypt', EncryptionController@encrypt'];
Route::get['decrypt', EncryptionController@decrypt'];
1. Trong một tình huống thực tế, rất có thể bạn sẽ nhận được chuỗi của mình từ yêu cầu POST hoặc lệnh gọi API chẳng hạnPhần kết luận
Để biết thêm thông tin về cách sử dụng Mã hóa Laravel, hãy đảm bảo xem tài liệu chính thức tại đây