Giải mã mã hóa PHP bằng muối

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

  • 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`);
    3
  • 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`);
    4

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

Giải mã mã hóa PHP bằng muối
Tải xuống & Ghi chú

Giải mã mã hóa PHP bằng muối
Hệ thống người dùng giả

Giải mã mã hóa PHP bằng muối
Mã hóa và giải mã mật khẩu PHP

Giải mã mã hóa PHP bằng muối
Bit bổ sung & liên kết

Giải mã mã hóa PHP bằng muối
Video hướng dẫn

Giải mã mã hóa PHP bằng muối
Kết thúc

 

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
    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`);
    5
  • Thay đổi cài đặt cơ sở dữ liệu trong
    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();
    0 thành của riêng bạn
  • Hướng dẫn từ
    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();
    1 đến
    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();
    2 cho các phương pháp khác nhau
Nếu bạn phát hiện ra một lỗi, hãy bình luận bên dưới. Tôi cũng cố gắng trả lời các câu hỏi ngắn, nhưng đó là một người so với cả thế giới… Nếu bạn cần câu trả lời gấp, vui lòng xem danh sách các trang web của tôi để được trợ giúp về lập trình

 

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
    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 đượ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ối
  • (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();
    6 Hàm trợ giúp để chạy truy vấn SQL
  • (D)
    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();
    7 Lưu người dùng vào cơ sở dữ liệu
  • (E)
    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();
    8 Nhận người dùng từ cơ sở dữ liệu
  • (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();
1

Như 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,
    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();
    9 sử dụng thuật toán
    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();
    10. Bạn có thể thay đổi thuật toán, xem danh sách đầy đủ tại đây
  • Đả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
    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();
    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ã

 

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
    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();
    12 trong
    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();
    13
  • 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 –
    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();
    14
  • Đừ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
    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();
    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ụ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();
    16

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();
1

Ngà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
    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();
    19 mà không cần
    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();
    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 nay
  • 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ó,
    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 là hàm băm một chiều. Không có cái gọi là “chức năng giải mã”

 

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();
7

Cuố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`);
2

Cá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

Bạn có thể giải mã mật khẩu bằng muối không?

Vì vậy, mỗi mật khẩu sẽ được thêm vào một loại muối duy nhất trước khi băm và nếu máy chủ bị tấn công và các hàm băm bị rò rỉ, tin tặc sẽ gặp khó khăn trong việc hủy băm bằng bảng cầu vồng. Việc tạo muối không có tác dụng mã hóa/giải mã vì nó không phục vụ mục đích nào .

Chúng tôi có thể giải mã SHA256 bằng muối không?

Chúng tôi có thể giải mã SHA256 bằng PHP không?

Có thể giải mã SHA-256 không? . Thứ hai, vì SHA256 không phải là chức năng mã hóa nên không thể giải mã được .

Bạn có thể giải mã mật khẩu từ hàm băm và muối không?

Không thể giải mã nó . Tuy nhiên, bạn có thể bẻ khóa nó bằng phương pháp brute force để tìm mật khẩu phù hợp trong từ điển.