Melaksanakan Penyulitan/Penyahsulitan dan Hashing dalam PHP
Pengenalan
Dalam pembangunan web, ia adalah penting untuk melindungi data pengguna yang sensitif dengan menyulitkannya sebelum menyimpannya dalam pangkalan data. PHP menyediakan keupayaan penyulitan dan pencincangan yang teguh untuk meningkatkan keselamatan data.
Penyulitan
Penyulitan Simetri:
Untuk menyulitkan data secara simetri , PHP menggunakan sambungan OpenSSL. Pertimbangkan untuk menggunakan AES-256-CBC dengan kunci penyulitan selamat dan vektor permulaan (IV) untuk rawak. Sulitkan data dalam ketulan 16 bait dan simpan kedua-dua data yang disulitkan dan IV dalam pangkalan data anda.
Penyulitan Disahkan:
Untuk keselamatan tambahan, tambahkan tandatangan pada anda data yang disulitkan menggunakan kunci pengesahan yang berasingan. Ini akan membolehkan anda mengesahkan integriti data sebelum penyahsulitan.
Penyahsulitan
Ikuti algoritma penyulitan yang sama dengan kunci rahsia dan IV yang sama untuk menyahsulit data dengan selamat . Secara pilihan, sahkan data yang disulitkan sekali lagi sebelum menyahsulitnya.
Pencincangan
Pencincangan Kata Laluan:
Elakkan menyimpan kata laluan pengguna dalam plaintext. Sebaliknya, cincang mereka menggunakan algoritma yang perlahan dan selamat seperti bcrypt. Bcrypt menggunakan garam untuk membuat serangan brute-force komputasi mahal.
Pengesahan:
Untuk mengesahkan kata laluan terhadap yang dicincang setaranya, gunakan fungsi crypt() atau fungsinya PHP 5.5 bersamaan, password_verify(). Gunakan perbandingan masa tetap untuk mengelakkan serangan masa.
Contoh Pelaksanaan
Penyulitan:
$encryption_key = openssl_random_pseudo_bytes(32); $iv = openssl_random_pseudo_bytes(16); $enc_data = openssl_encrypt($data, 'AES-256-CBC', $encryption_key, 0, $iv);
Penyahsulitan:
$dec_data = openssl_decrypt($enc_data, 'AES-256-CBC', $encryption_key, 0, $iv);
Kata Laluan Hashing:
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 13]);
Pengesahan:
if (password_verify($password, $hash)) { // Password valid }
Atas ialah kandungan terperinci Bagaimanakah PHP Boleh Menyulitkan, Menyahsulit dan Data Cincang dengan Selamat untuk Aplikasi Web?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!