Laravel - การเข้ารหัส
การเข้ารหัสเป็นกระบวนการในการแปลงข้อความธรรมดาเป็นข้อความโดยใช้อัลกอริทึมบางอย่างเพื่อให้ผู้ใช้รายที่สามไม่สามารถอ่านข้อมูลได้ สิ่งนี้มีประโยชน์สำหรับการส่งข้อมูลที่ละเอียดอ่อนเนื่องจากมีโอกาสน้อยที่ผู้บุกรุกจะกำหนดเป้าหมายข้อมูลที่ถ่ายโอน
การเข้ารหัสดำเนินการโดยใช้กระบวนการที่เรียกว่า Cryptography. ข้อความที่จะเข้ารหัสเรียกว่าPlain Text และข้อความหรือข้อความที่ได้รับหลังจากเรียกการเข้ารหัส Cipher Text. เรียกกระบวนการแปลงข้อความรหัสเป็นข้อความธรรมดาDecryption.
Laravel ใช้ AES-256 และ AES-128ผู้เข้ารหัสซึ่งใช้ Open SSL สำหรับการเข้ารหัส ค่าทั้งหมดที่รวมอยู่ใน Laravel จะลงนามโดยใช้โปรโตคอลMessage Authentication Code เพื่อให้ไม่สามารถแก้ไขค่าพื้นฐานได้เมื่อเข้ารหัสแล้ว
การกำหนดค่า
คำสั่งที่ใช้ในการสร้างไฟล์ key ใน Laravel แสดงไว้ด้านล่าง -
php artisan key:generate
โปรดทราบว่าคำสั่งนี้ใช้ตัวสร้างไบต์แบบสุ่มที่ปลอดภัยของ PHP และคุณจะเห็นผลลัพธ์ดังที่แสดงในภาพหน้าจอด้านล่าง
คำสั่งที่ระบุข้างต้นช่วยในการสร้างคีย์ที่สามารถใช้ในเว็บแอปพลิเคชัน สังเกตภาพหน้าจอด้านล่าง -
บันทึก
ค่าสำหรับการเข้ารหัสถูกจัดตำแหน่งอย่างเหมาะสมในไฟล์ config/app.php ซึ่งมีพารามิเตอร์สองตัวสำหรับการเข้ารหัส ได้แก่ key และ cipher. หากค่าที่ใช้คีย์นี้ไม่ได้รับการจัดแนวอย่างเหมาะสมค่าทั้งหมดที่เข้ารหัสใน Laravel จะไม่ปลอดภัย
กระบวนการเข้ารหัส
การเข้ารหัสค่าสามารถทำได้โดยใช้ไฟล์ encrypt helperในคอนโทรลเลอร์ของคลาส Laravel ค่าเหล่านี้ถูกเข้ารหัสโดยใช้ OpenSSL และ AES-256 cipher ค่าที่เข้ารหัสทั้งหมดจะลงนามด้วย Message Authentication code (MAC) เพื่อตรวจสอบการแก้ไขของสตริงที่เข้ารหัส
รหัสที่แสดงด้านล่างกล่าวถึงในคอนโทรลเลอร์และใช้เพื่อเก็บความลับหรือข้อความที่ละเอียดอ่อน
<?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();
}
}
กระบวนการถอดรหัส
การถอดรหัสของค่าทำได้ด้วย decrypt helper. สังเกตโค้ดบรรทัดต่อไปนี้ -
use Illuminate\Contracts\Encryption\DecryptException;
// Exception for decryption thrown in facade
try {
$decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}
โปรดทราบว่าหากกระบวนการถอดรหัสไม่สำเร็จเนื่องจากมีการใช้ MAC ที่ไม่ถูกต้องข้อยกเว้นที่เหมาะสมจะถูกโยนทิ้งไป