使用加密将密码存储在文本文件中的PHP加密对称程序示例
时间:2020-01-09 10:40:45 来源:igfitidea点击:
问题描述:对称加密是一种加密类型,其中相同的密钥用于加密和解密消息。
您能解释一下如何在PHP下使用对称加密将密码存储在文本文件中并验证用户身份吗?
解决方法:对称加密不同于非对称(也称为公共密钥)加密,后者使用一个密钥对消息进行加密,并使用另一个密钥对消息进行解密。
PHP crypt()将使用标准的基于Unix DES的加密算法或系统上可用的替代算法返回加密的字符串。
参数是要加密的字符串,是用于加密的可选盐字符串。
有关您的crypt函数的更多信息,请参见Unix手册页。
语法:string crypt(string $str [,string $salt])
考虑下面的例子。
$en_password:存储加密的密码。
您需要将其存储在数据库或纯文本文件中。
$userPasswordInput:通过HTML页面保存用户提供/提供的密码
如果使用命令检查用户提供的密码的加密密码(哈希)。
<?php //Standard DES-based encryption with a two character salt called 'ge' $en_password = crypt('secrete','ge'); if (crypt($userPasswordInput, $en_password) == $en_password) { echo "Password verified, you can login!"; } ?>
PHP函数将密码写入/存储到名为/home/secure/.password的文件
function updateAdminLoginPassword($new){ $encryptedPassword; //This is Blowfish encryption with a sixteen character salt starting with or a$ $encryptedPassword = crypt($new, 'a$didIL...fpSd78..$'); // Open the file and erase the contents if any $fp = fopen("/home/secure/.password", "w"); // Write the data to the file fwrite($fp, $Password); // Close the file fclose($fp); echo '<h3>Password has been updated!<h3>'; echo '<SCRIPT>alert(\'Password changed! You must login again to use new password\');</SCRIPT>'; /* resetSession(); */ }
验证密码的函数(请注意,我们在两个函数$2a $didILfpSd78 .. $中都使用了哈希):
function verifyPassword($password) { $username= "admin"; $encryptedpasswd=""; // read encrypted password $fp = fopen("/home/secure/.password", "r"); while ( $line = fgets($fp, 1000) ) { $encryptedpasswd=$line; } if ( $_POST["username"] == $username && (crypt($password,'a$didIL...fpSd78..$') == $encryptedpasswd) ) { // allow login session_start(); //Initialize session data //store user login name and password $_SESSION['user'] = $username; $_SESSION['pwd'] = $encryptedpasswd; // display main menu header( "Location: /welcome.php" ); } else { // password is not correct or session expired due to password change header( "Location: /login.php?sessionnotfound=1" ); } }
上面的示例仅向您提供有关php密码加密和哈希的想法。
您必须考虑其他因素,例如SSL http会话,MD5密码/哈希和用于存储密码的mysql数据库等。