首頁 >後端開發 >php教程 >如何在 PHP 中使用雙向加密安全地儲存和檢索密碼?

如何在 PHP 中使用雙向加密安全地儲存和檢索密碼?

Barbara Streisand
Barbara Streisand原創
2024-12-19 12:08:39801瀏覽

How Can I Securely Store and Retrieve Passwords Using Two-Way Encryption in PHP?

雙向加密:儲存可擷取的密碼

簡介

安全密碼允許使用者檢索它們構成了挑戰。對稱加密可以滿足這種需求,但理解實現的細微差別至關重要。

PHP 中的加密和解密

要在 PHP 中加密和解密密碼,請考慮使用mcrypt 或 OpenSSL 函式庫。以下是使用 mcrypt 的範例:

function encrypt($password, $key)
{
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);
    return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $password, MCRYPT_MODE_CBC, $iv);
}

function decrypt($encryptedPassword, $key)
{
    $iv = substr($encryptedPassword, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
    $password = substr($encryptedPassword, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
    return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $password, MCRYPT_MODE_CBC, $iv);
}

最安全的演算法

最佳加密演算法取決於特定的用例。對於儲存密碼,CBC 或 CTR 模式下的 AES-256 (Rijndael) 通常被認為是可靠的。

私鑰儲存

安全地儲存私鑰至關重要。一種建議的方法是使用使用者密碼和伺服器端鹽的組合。在PHP 中,可以使用以下方法實現:

$salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
$key = hash('sha256', $userPassword . $salt);

私鑰作為用戶輸入

如果用戶可信,則要求他們在檢索時提供私鑰密碼可以提供額外的安全性。這可以防止伺服器端洩漏。

安全風險

加密的密碼可能容易受到:

  • 金鑰外洩
  • 暴力攻擊
  • 重播攻擊
  • 攔截
  • 已知明文攻擊

緩解策略

緩解策略
  • 要減輕這些風險,請實施:
  • 強加密演算法
  • 安全金鑰儲存
  • 密碼雜湊
解密嘗試逾時雙重認證

以上是如何在 PHP 中使用雙向加密安全地儲存和檢索密碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn