我该如何使用此代码?

时间:2014-07-30 21:11:31

标签: php encryption pdo

session_start();
$member_username = $_POST['username']; 
$member_password = $_POST['password'];
$crypt_pass = crypt($member_password,"somesalt");

try {
    $dbh = new PDO('mysql:host=localhost;dbname='.DB_NAME, DB_USERNAME,DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} 
catch (PDOException $e) {
    echo "Fatal error.";
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}    

$sth = $dbh->prepare("SELECT * FROM ".DB_PREFIX."_users WHERE username = :user AND password = :pass");
$sth->bindParam(':user', $member_username);
$sth->bindParam(':pass', $crypt_pass);
$sth->execute();
$total = $sth->rowCount();
$row = $sth->fetch();

变量$member_password来自$_POST,但有人可以解释并说明如何加密吗?

$crypt_pass = crypt($member_password,"somesalt");

2 个答案:

答案 0 :(得分:0)

函数crypt返回密码的哈希值,你不能简单地从哈希中检索原始密码,攻击者也不能,这样你就可以将密码存储在具有优化安全性的数据库中,盐复杂度越高哈希越安全,请参阅http://php.net//manual/en/function.crypt.php

答案 1 :(得分:0)

crypt是一个PHP函数,它接受一个字符串并使用DES算法(默认情况下)使用给定的salt对其进行加密。这是必需的,因为出于明显的安全原因,您不应该在没有加密或散列的情况下存储密码。

盐是一个(可能是随机的)值,您应该将其与用户的信息一起存储,并且为了使加密更加安全而需要它。 (有关更多信息,请参阅PHP文档;有关如何存储密码的教程,请参阅google)。

希望这会有所帮助:)