【问题标题】:How can i use this code?我怎样才能使用这个代码?
【发布时间】:2014-07-30 21:11:30
【问题描述】:
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");

【问题讨论】:

  • 看这里crypt()
  • 一般提示:如果您需要有关 PHP 函数的帮助,请转到 http://php.net/name_of_function
  • 应该忘记使用 crypt,除非您想使用自己独特的盐和哈希代码,PHP 5.5 的新 password_* 会为您处理这一切;如果您没有 PHP 5.5,那么您应该使用 ircmaxell 的 password_compat
  • 这与PDO无关。

标签: php encryption pdo


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    salt 是一个(可能是随机的)值,您应该将它与用户的信息一起存储,它是使加密“更安全”所必需的(有关更多信息,请参阅 PHP 文档或谷歌获取有关如何使用的教程存储密码)。

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多