Verschlüsselung und Entschlüsselung
Laravel Der Verschlüsselungsmechanismus verwendet die von OpenSSL bereitgestellte AES-256- und AES-128-Verschlüsselung. Es wird dringend empfohlen, die integrierten Verschlüsselungstools von Laravel anstelle anderer Verschlüsselungsalgorithmen zu verwenden. Alle mit Laravel verschlüsselten Ergebnisse werden mit einem Message Authentication Code (MAC) signiert, sodass der zugrunde liegende Wert nach der Verschlüsselung nicht geändert werden kann.
Bevor Sie das Verschlüsselungstool von Laravel verwenden, müssen Sie zunächst die
Konfigurationsdatei festlegen Option. Sie sollten den Schlüssel mit dem Befehl config/app.php
generieren, einem Artisan-Befehl, der den sicheren Zufallsbytegenerator von PHP zum Erstellen des Schlüssels verwendet. Wenn dieser key
-Wert nicht korrekt eingestellt ist, sind alle von Laravel verschlüsselten Werte unsicher. php artisan key:generate
key
Sie können Hilfsmittel verwenden Funktion „encrypt“, um einen Wert zu verschlüsseln. Alle verschlüsselten Werte werden mit AES-256-CBC von OpenSSL verschlüsselt. Darüber hinaus werden alle verschlüsselten Werte mit einem Message Authentication Code (MAC) signiert, um Manipulationen an der verschlüsselten Zeichenfolge zu erkennen:
<?php namespace App\Http\Controllers; use App\User;use Illuminate\Http\Request; use App\Http\Controllers\Controller;class UserController extends Controller{ /** * 存储用户的保密信息 * * @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(); } }
Keine Serialisierungsverschlüsselung
Während des Verschlüsselungsprozesses wird der verschlüsselte Wert serialize
nach der Serialisierung übergeben, wodurch verschlüsselte Objekte und Arrays ermöglicht werden. Daher müssen Nicht-PHP-Clients, die verschlüsselte Werte empfangen, die Daten unserialize
deserialisieren. Wenn Sie einen Wert ver- oder entschlüsseln möchten, ohne ihn zu serialisieren, können Sie die Methoden Crypt
und encryptString
der decryptString
Facade verwenden:
use Illuminate\Support\Facades\Crypt; $encrypted = Crypt::encryptString('Hello world.'); $decrypted = Crypt::decryptString($encrypted);
Wert entschlüsseln
Zum Entschlüsseln können Sie die Hilfsfunktion decrypt
verwenden. Wenn der Wert nicht korrekt entschlüsselt werden kann, beispielsweise wenn der MAC ungültig ist, wird eine Ausnahme IlluminateContractsEncryptionDecryptException
ausgelöst:
use Illuminate\Contracts\Encryption\DecryptException;try { $decrypted = decrypt($encryptedValue); } catch (DecryptException $e) { // }