author: @kawam tags:#rnd,#postgresql,#php
PostgreSQL
PGCrypto
pgcrypto adalah sebuah ekstensi enkripsi untuk PostgreSQL yang menyediakan beberapa fungsi kriptografi untuk mengenkripsi dan mendekripsi data. pgcrypto menggunakan algoritma enkripsi yang terkenal seperti AES, Blowfish, dan RSA, untuk memberikan keamanan yang kuat bagi data sensitif.
Untuk menggunakan pgcrypto di Laravel, Anda perlu menginstal ekstensi “pgcrypto” untuk database PostgreSQL Anda dan mengonfigurasi aplikasi Laravel Anda untuk menggunakan ekstensi tersebut. Berikut adalah langkah-langkah umumnya:
-
Menginstal ekstensi pgcrypto - Untuk menginstal ekstensi pgcrypto untuk PostgreSQL, Anda dapat menggunakan perintah berikut:
CREATE EXTENSION pgcrypto; -
Mengonfigurasi Laravel untuk menggunakan pgcrypto - Dalam aplikasi Laravel Anda, Anda dapat menggunakan metode
DB::selectuntuk mengeksekusi query SQL mentah yang termasuk fungsi pgcrypto, sepertipgp_sym_encryptdanpgp_sym_decrypt. Berikut adalah contoh penggunaannya:
Example:
ALTER TABLE employees ADD COLUMN encrypted_ssn bytea;
-- update data and encrypt
UPDATE employees SET encrypted_ssn = pgp_sym_encrypt(ssn, 'my_secret_key', 'AES256');
-- select and decrypt
SELECT id, name, email, pgp_sym_decrypt(encrypted_ssn, 'my_secret_key', 'AES256') AS ssn FROM employees;
Untuk multiple value:
UPDATE employees
SET encrypted_ssn = pgp_sym_encrypt(ssn, 'my_secret_key', 'AES256'),
encrypted_email = pgp_sym_encrypt(email, 'my_secret_key', 'AES256');Implementasi dengan Laravel
config file
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
'sslmode' => 'prefer',
'options' => [
\PDO::ATTR_EMULATE_PREPARES => true,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_PERSISTENT => true,
'pgsql_crypto_key' => env('PGSQL_CRYPTO_KEY'),
],
],Contoh query
$results = DB::connection('pgsql')->select("
SELECT id, name, pgp_sym_decrypt(email, :key) AS email
FROM users
", ['key' => env('PGSQL_CRYPTO_KEY')]);Laravel
Encryption - Laravel - The PHP Framework For Web Artisans
encrypt script
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
class DigitalOceanTokenController extends Controller
{
/**
* Store a DigitalOcean API token for the user.
*/
public function store(Request $request): RedirectResponse
{
$request->user()->fill([
'token' => Crypt::encryptString($request->token),
])->save();
return redirect('/secrets');
}
}decrypt script
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
try {
$decrypted = Crypt::decryptString($encryptedValue);
} catch (DecryptException $e) {
// ...
}