每個人在建構 PHP 應用時終究都會加入用戶登錄的模塊。用戶的帳號及密碼會被儲存在數據庫中,在登錄時用來驗證用戶。
在存儲密碼前正確的哈希密碼是非常重要的。哈希密碼是單向不可逆的,該哈希值是一段固定長度的字符串且無法逆向推算出原始密碼。這就代表你可以哈希另一串密碼,來比較兩者是否是同一個密碼,但又無需知道原始的密碼。如果你不將密碼哈希,那么當未授權的第三者進入你的數據庫時,所有用戶的帳號資料將會一覽無遺。有些用戶可能(很不幸的)在別的網站也使用相同的密碼。所以務必要重視數據安全的問題。
使用 `password_hash `來哈希密碼
`password_hash `函數在 PHP 5.5 時被引入。 此函數現在使用的是目前 PHP 所支持的最強大的加密算法 BCrypt 。 當然,此函數未來會支持更多的加密算法。 `password_compat` 庫的出現是為了提供對 PHP >= 5.3.7 版本的支持。
在下面例子中,我們哈希一個字符串,然后和新的哈希值對比。因為我們使用的兩個字符串是不同的(’secret-password’ 與 ‘bad-password’),所以登錄失敗。
~~~
<?php
require 'password.php';
$passwordHash = password_hash('secret-password', PASSWORD_DEFAULT);
if (password_verify('bad-password', $passwordHash)) {
// Correct Password
} else {
// Wrong password
}
~~~
* [了解 password_hash()](http://php.net/function.password-hash)
* [PHP >= 5.3.7 && < 5.5 的 password_compat](https://github.com/ircmaxell/password_compat)
* [了解密碼學中的哈希](http://en.wikipedia.org/wiki/Cryptographic_hash_function)
* [PHP password_hash() RFC](https://wiki.php.net/rfc/password_hash)
- 歡迎
- 入門指南
- 使用當前穩定版本
- 內置的WEB服務器
- Mac安裝
- Windows安裝
- 代碼風格指南
- 語言亮點
- 編程范式
- 命名空間
- PHP標準庫
- 命令行接口
- Xdebug
- 依賴管理
- Composer 與 Packagist
- PEAR
- 開發實踐
- 基礎知識
- 日期和時間
- 設計模式
- 使用UTF8編碼
- 依賴注入
- 基本概念
- 復雜的問題
- 容器
- 延伸閱讀
- 數據庫
- MYSQL 擴展
- PDO 擴展
- 數據庫交互
- 數據庫抽象層
- 使用模板
- 好處
- 原生PHP模板
- 編譯模板
- 延伸閱讀
- 錯誤與異常
- 錯誤
- 異常
- 安全
- Web應用程序安全
- 密碼哈希
- 數據過濾
- 配置文件
- 注冊全局變量
- 錯誤報告
- 測試
- 測試驅動開發
- 行為驅動開發
- 其他測試工具
- 服務器與部署
- Platform as a Service (PaaS)
- 虛擬或專用服務器
- 共享服務器
- 構建及部署應用
- 虛擬化
- Vagrant
- Docker
- 緩存
- Opcode緩存
- 對象緩存
- 文檔撰寫
- 資源
- 社區
- Credits