双向加密:存储可检索的密码
简介
安全存储密码,同时允许用户检索它们构成了挑战。对称加密可以满足这种需求,但理解实现的细微差别至关重要。
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中文网其他相关文章!