使用加密将密码存储在文本文件中的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数据库等。