Chào mừng bạn đến với hướng dẫn về các cách khác nhau để mã hóa, giải mã và xác minh mật khẩu trong PHP. Vì bạn đang đọc hướng dẫn này, tôi sẽ cho rằng bạn đang tìm cách tạo ra một hệ thống an toàn hơn. Có, tôi hiểu rằng chúng tôi là nhà phát triển web chứ không phải chuyên gia bảo mật. Nhưng bảo mật là một mối quan tâm lớn, ít nhất cũng không hại gì khi biết cách đặt khóa trên hệ thống của bạn
Một cách dễ dàng để bảo vệ mật khẩu trong PHP là sử dụng hàm băm mật khẩu và hàm xác minh
3CREATE TABLE `users` [ `email` varchar[255] NOT NULL, `password` varchar[255] NOT NULL ] ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `users` ADD PRIMARY KEY [`email`];
4CREATE TABLE `users` [ `email` varchar[255] NOT NULL, `password` varchar[255] NOT NULL ] ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `users` ADD PRIMARY KEY [`email`];
Vâng, đó là tất cả. Nhưng có một số cách khác để bảo mật mật khẩu trong PHP – Hãy để chúng tôi xem qua các ví dụ khác, trừ đi tất cả những thứ Toán học phức tạp đó. đọc tiếp
ⓘ Tôi đã bao gồm một tệp zip chứa tất cả các mã ví dụ khi bắt đầu hướng dẫn này, vì vậy bạn không cần phải sao chép-dán mọi thứ… Hoặc nếu bạn chỉ muốn đi sâu vào
TLDR – TRANG TRÌNH BÀY NHANH
TẢI XUỐNG & LƯU Ý
Đầu tiên, đây là liên kết tải xuống mã ví dụ như đã hứa
GHI CHÚ NHANH
- Tạo cơ sở dữ liệu giả và nhập
5CREATE TABLE `users` [ `email` varchar[255] NOT NULL, `password` varchar[255] NOT NULL ] ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `users` ADD PRIMARY KEY [`email`];
- Thay đổi cài đặt cơ sở dữ liệu trong
0 thành của riêng bạnclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
- Hướng dẫn từ
1 đếnclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
2 cho các phương pháp khác nhauclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
MÃ VÍ DỤ TẢI XUỐNG
Nhấp vào đây để tải xuống tất cả các ví dụ, tôi đã phát hành nó theo giấy phép MIT, vì vậy hãy thoải mái xây dựng trên nó hoặc sử dụng nó trong dự án của riêng bạn
HỆ THỐNG NGƯỜI DÙNG GIẢ
Trước khi chúng tôi đi vào các phương pháp mã hóa/giải mã mật khẩu, đây là cơ sở nhanh… Bởi vì không phải ai cũng là chuyên gia và có thể nhìn thấy toàn bộ bức tranh ngay lập tức
CƠ SỞ DỮ LIỆU NGƯỜI DÙNG GIẢ
người dùng 0a. sql
CREATE TABLE `users` [
`email` varchar[255] NOT NULL,
`password` varchar[255] NOT NULL
] ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `users`
ADD PRIMARY KEY [`email`];
Trong ví dụ này, chúng tôi sẽ làm việc với cơ sở dữ liệu này. Rất đơn giản. Chỉ có 2 trường –
class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
3 và class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
4
THƯ VIỆN NGƯỜI DÙNG GIẢ
0b-lib. php
class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
Trông có vẻ phức tạp, nhưng thực ra khá đơn giản
- [A, B, G] Khi
5 được tạo, hàm tạo kết nối với cơ sở dữ liệu. Hàm hủy đóng kết nốiclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
- [C]
6 Hàm trợ giúp để chạy truy vấn SQLclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
- [D]
7 Lưu người dùng vào cơ sở dữ liệuclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
- [E]
8 Nhận người dùng từ cơ sở dữ liệuclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
- [F] Thay đổi cài đặt cơ sở dữ liệu thành của riêng bạn
MẬT KHẨU PHP MẬT KHẨU & GIẢI MẬT
Được rồi, bây giờ chúng ta hãy tìm hiểu các cách khác nhau để mã hóa, giải mã và xác minh mật khẩu trong PHP
PHƯƠNG PHÁP 1] BẮT MẬT KHẨU và XÁC MINH
1-băm-xác minh
class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
1Như trong phần giới thiệu, đây có lẽ là một trong những cách dễ nhất và không phiền phức
- Theo mặc định,
9 sử dụng thuật toánclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
10. Bạn có thể thay đổi thuật toán, xem danh sách đầy đủ tại đâyclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
- Đảm bảo rằng bạn đã phân bổ đủ ký tự cho trường mật khẩu trong cơ sở dữ liệu. Tại thời điểm viết bài, hàm băm mật khẩu được tạo là 60 ký tự. Điều này có thể lâu hơn với các bản cập nhật thuật toán trong tương lai
- Hãy lưu ý rằng
9 là mã hóa một chiều. Sau khi được mã hóa, không có cách nào để dễ dàng giải mãclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
PHƯƠNG PHÁP 2] OPENSSL
2-opensl. php
class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
5- Để sử dụng mã hóa OpenSSL, bạn cần bật
12 trongclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
13class User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
- Bạn cũng cần xác định một khóa bí mật, “mật khẩu bí mật” của riêng bạn –
14class User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
- Đừng để mất chìa khóa bí mật. Giữ nó an toàn và không bao giờ tiết lộ nó công khai
- Có nhiều phương pháp mật mã khác nhau mà chúng ta có thể sử dụng với
15. Bạn có thể lấy danh sách đầy đủ có sẵn trên hệ thống của mình bằng cách sử dụngclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
16class User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
P. S. Mã hóa OpenSSL là mã hóa hai chiều. Có, chúng tôi có thể lấy lại mật khẩu trong văn bản rõ ràng. Có thể điều này phù hợp với một số người, với mục đích khôi phục mật khẩu tự động. Nhưng hãy suy nghĩ kỹ - Khóa bí mật bị xâm phạm có nghĩa là ai đó có quyền truy cập vào tất cả mật khẩu
P. P. S. OpenSSL vẫn có thể hoạt động đối với thứ gì đó như “mật khẩu thứ hai” – Mỗi người dùng giữ khóa bí mật của riêng họ, để mã hóa-giải mã dữ liệu nhạy cảm của họ trên máy chủ;
PHƯƠNG PHÁP 3] CRYPT BẰNG MUỐI
3 mật mã. php
class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
1Ngày xửa ngày xưa trong thời đại đồ sắt của PHP, việc mã hóa mật khẩu không hề dễ dàng. Chúng tôi thực hiện mã hóa theo cách thủ công bằng cách sử dụng
class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
17 và xác minh bằng class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
18. Để giữ cho câu chuyện dài ngắn- Chúng tôi có thể sử dụng
19 mà không cầnclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
50. Nhưng điều này có thể dễ dàng bị bẻ khóa với sức mạnh xử lý ngày nayclass User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
- Vì vậy, nói một cách đơn giản - Một "muối" được sử dụng để làm xáo trộn thêm mật khẩu, khiến mật khẩu khó bẻ khóa hơn một chút
- Có,
17 là hàm băm một chiều. Không có cái gọi là “chức năng giải mã”class User { // [A] CONSTRUCTOR - CONNECT TO DATABASE private $pdo = null; private $stmt = null; public $error = null; function __construct [] { try { $this->pdo = new PDO[ "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]]; } catch [Exception $ex] { exit[$ex->getMessage[]]; }} // [B] DESTRUCTOR - CLOSE DATABASE CONNECTION function __destruct [] { if [$this->stmt !== null] { $this->stmt = null; } if [$this->pdo !== null] { $this->pdo = null; } } // [C] HELPER - RUN QUERY function query [$sql, $data=null] { $this->stmt = $this->pdo->prepare[$sql]; $this->stmt->execute[$data]; } // [D] ADD/UPDATE USER function save [$email, $password] { $this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]]; return true; } // [E] GET USER function get [$email] { $this->query["SELECT * FROM `users` WHERE `email`=?", [$email]]; return $this->stmt->fetch[]; } } // [F] DATABASE SETTINGS - CHANGE TO YOUR OWN! define["DB_HOST", "localhost"]; define["DB_NAME", "test"]; define["DB_CHARSET", "utf8"]; define["DB_USER", "root"]; define["DB_PASSWORD", ""]; // [G] USER OBJECT $_USR = new User[];
PHƯƠNG PHÁP 4] MD5 & SHA1
4-md5-sha. php
class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
7Cuối cùng, đây là một phương pháp mã hóa mật khẩu cổ điển khác mà chúng tôi sử dụng trong Thời kỳ đồ đá – Bằng cách sử dụng
class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
52 hoặc class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
53. Hãy lưu ý, đây là những phương pháp thời kỳ đồ đá. Với sức mạnh xử lý ngày nay, class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
52 và class User {
// [A] CONSTRUCTOR - CONNECT TO DATABASE
private $pdo = null;
private $stmt = null;
public $error = null;
function __construct [] {
try { $this->pdo = new PDO[
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]];
} catch [Exception $ex] { exit[$ex->getMessage[]]; }}
// [B] DESTRUCTOR - CLOSE DATABASE CONNECTION
function __destruct [] {
if [$this->stmt !== null] { $this->stmt = null; }
if [$this->pdo !== null] { $this->pdo = null; }
}
// [C] HELPER - RUN QUERY
function query [$sql, $data=null] {
$this->stmt = $this->pdo->prepare[$sql];
$this->stmt->execute[$data];
}
// [D] ADD/UPDATE USER
function save [$email, $password] {
$this->query["REPLACE INTO `users` [`email`, `password`] VALUES [?,?]", [$email, $password]];
return true;
}
// [E] GET USER
function get [$email] {
$this->query["SELECT * FROM `users` WHERE `email`=?", [$email]];
return $this->stmt->fetch[];
}
}
// [F] DATABASE SETTINGS - CHANGE TO YOUR OWN!
define["DB_HOST", "localhost"];
define["DB_NAME", "test"];
define["DB_CHARSET", "utf8"];
define["DB_USER", "root"];
define["DB_PASSWORD", ""];
// [G] USER OBJECT
$_USR = new User[];
53 có thể dễ dàng bị bẻ khóa. Vì vậy, nếu bạn muốn sử dụng nó ngày hôm nay, ít nhất hãy thêm một chút muối vào
BIT BỔ SUNG & LIÊN KẾT
Đó là tất cả cho hướng dẫn này, và đây là một số tính năng bổ sung và liên kết có thể hữu ích cho bạn
PHƯƠNG PHÁP NÀO LÀ NHANH NHẤT?
5 bài kiểm tra. php
CREATE TABLE `users` [
`email` varchar[255] NOT NULL,
`password` varchar[255] NOT NULL
] ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `users`
ADD PRIMARY KEY [`email`];
2Cái nào nhanh nhất trong số chúng?
Chúng ta đã đi đến phần cuối của hướng dẫn này, tôi hy vọng nó đã giúp ích cho bạn trong việc mã hóa mật khẩu. Các “siêu hacker” chắc sẽ phì cười với “phương pháp mã hóa đơn giản”. Nhưng tại sao người ta vẫn dùng khóa dù biết có thể đột nhập? . An ninh mạng cũng vậy, có khóa còn hơn không
Cảm ơn bạn đã đọc. Nếu bạn có bất cứ điều gì để thêm vào hướng dẫn này, xin vui lòng bình luận dưới đây. Chúc may mắn và mã hóa hạnh phúc