我遇到了一个讨论,在这个讨论中,我了解到我所做的事情实际上并不是叮叮当当的密码,而是从此开始使用以下function: hash_function($salt.hash_function($pepper.$password)) [multiple iterations] 忽略select的散列algorithm(我希望这是一个盐和辣椒的讨论,而不是具体的algorithm,但我使用的是一个安全的),这是一个安全的select,还是应该做一些不同的? 对于那些不熟悉的条款: salt是随机生成的值,通常与数据库中的string一起存储,旨在使不可能使用散列表来破解密码。 由于每个密码都有自己的盐,所以他们都必须单独被强制性的破解。 然而,由于盐与密码散列存储在数据库中,数据库的妥协意味着两者都将丢失。 胡椒是一个站点范围的静态值,与数据库分开存储(通常在应用程序的源代码中硬编码),这是为了保密。 它的使用是为了妥协的数据库不会导致整个应用程序的密码表是暴躁的。 有什么我失踪,并腌制和胡椒我的密码保护我的用户的安全的最佳select? 这样做有没有潜在的安全缺陷? 注意:为了讨论的目的,假定应用程序和数据库存储在不同的机器上,不要共享密码等,因此违反数据库服务器并不意味着违反应用程序服务器。
最近我一直试图通过在互联网上偶然发现的login脚本来实现我自己的安全。 在努力学习如何让自己的脚本为每个用户生成盐之后,我偶然发现了password_hash。 根据我的理解(基于本页面上的阅读: http : //php.net/manual/en/faq.passwords.php ),当您使用password_hash时,salt已经在行中生成。 这是真的? 我的另一个问题是,有2盐是不是聪明? 一个直接在文件中,一个在数据库中? 那样,如果有人在数据库中泄漏了你的盐,那么你还是直接在文件中有一个? 我在这里读到,储存盐不是一个聪明的想法,但它总是让我困惑的人是什么意思。
我的代码实际上工作,但它不是安全的,我不想使用MD5,因为它不是所有的安全。 我一直在查找密码哈希,但我不知道如何将它合并到我的代码。 login: require_once __DIR__.'/config.php'; session_start(); $dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_USERNAME, DB_USERNAME, DB_PASSWORD); $sql = "SELECT * FROM users WHERE username = :u AND password = :p"; $query = $dbh->prepare($sql); // prepare $params = array(":u" => $_POST['username'], ":p" => $_POST['password']); $query->execute($params); // execute $results = $query->fetchAll(); // then fetch //hash […]
在存储之前两次哈希密码是否比一次哈希一次更安全? 我在说的是这样做的: $hashed_password = hash(hash($plaintext_password)); 而不仅仅是这个: $hashed_password = hash($plaintext_password); 如果不太安全,你能提供一个很好的解释(或链接到一个)? 此外,使用的散列函数是否有所作为? 如果你混合使用md5和sha1(而不是重复相同的散列函数),它会有什么不同吗? 注1:当我说“双重散列”时,我正在谈论两次散列密码,以使其更加模糊。 我不是在谈论解决冲突的技巧 。 注2:我知道我需要添加一个随机盐,以确保安全。 问题是用相同的algorithm两次哈希是否有助于或伤害哈希。
这比普通的MD5更安全吗? 我刚开始研究密码安全。 我很新的PHP。 $salt = 'csdnfgksdgojnmfnb'; $password = md5($salt.$_POST['password']); $result = mysql_query("SELECT id FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."' AND password = '$password'"); if (mysql_num_rows($result) < 1) { /* Access denied */ echo "The username or password you entered is incorrect."; } else { $_SESSION['id'] = mysql_result($result, 0, 'id'); #header("Location: ./"); echo "Hello $_SESSION[id]!"; }