如何在 PHP 中安全地加密和解密密码
存储敏感的用户信息,例如外国帐户凭据,需要采取特殊的预防措施以确保数据安全。虽然加密提供了一层保护,但采用可靠的方法来防止未经授权访问纯文本数据至关重要。
散列与加密
散列是首选方法密码存储。与加密不同,散列将密码不可逆地转换为唯一且不可逆的格式,从而几乎不可能检索原始密码。这确保即使攻击者获得了哈希密码的访问权限,他们也无法危害用户帐户。
加密和解密函数
对于需要加密的情况,PHP提供了多种加密和解密文本的函数。一种常见的方法是 Rijndael 密码,也称为 AES-128:
$key = 'password to (en/de)crypt'; $string = ' string to be encrypted '; // note the spaces
加密:
$iv = mcrypt_create_iv( mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM ); $encrypted = base64_encode( $iv . mcrypt_encrypt( MCRYPT_RIJNDAEL_128, hash('sha256', $key, true), $string, MCRYPT_MODE_CBC, $iv ) );
到解密:
$data = base64_decode($encrypted); $iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)); $decrypted = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_128, hash('sha256', $key, true), substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)), MCRYPT_MODE_CBC, $iv ), "" );
警告
如果未经身份验证,加密数据很容易受到填充预言机攻击。经过身份验证的加密机制应始终与加密结合使用。
最佳实践
为了确保最高级别的安全性,请遵循以下最佳实践:
以上是如何使用 PHP 安全地加密和解密数据?的详细内容。更多信息请关注PHP中文网其他相关文章!