使用txt flatfile数据库

时间:2015-09-17 09:38:42

标签: php file text flat-file php-password-hash

我想了解password_hash()函数的工作原理。

我有这个超简化的php登录(完全不安全,只是为了学习),我选择了四个密码。

<?php

$data = file_get_contents('pass.txt');

if($_POST['pass']) {
    $line = explode("\n", $data);
    for($i = 0; $i<count($line); $i++) {
        $item = explode("#", $line[$i]);
        if($_POST['pass'] == $item[0]) {
            echo "Welcome! You're logged in!";
        }
    }
}

else { echo '<form method="POST" action="">
            <input type="password" name="pass">
            <input type="submit">
            <form>';
}

?>

pass.txt,其中保存密码(.txt flatfile database):

passone
passtwo
passthree
passfour

是否可以在我的代码中添加password_hash()函数?

我想php应该能够为此目的重写数据库,因为每次登录时这个函数都会重写密码。

谢谢你们XXX

2 个答案:

答案 0 :(得分:1)

  1. 对每个密码执行var app = angular.module('myFirstApp', []); app.controller('countriesController', function($scope) { $scope.countryList = [ {country:'Argentina'}, {country:'Brazil'}, {country:'Chile'}, {country:'Colombia'}, {country:'Paraguay'}, {country:'Panama'}, {country:'Andorra'} ]; }); ,将生成的长gobbledygook字符串存储在文本文件中。
  2. 而不是<ul id="countryList"> <li>Argentina</li> <li>Brazil</li> <li>Chile</li> <li>Colombia</li> <li>Paraguay</li> <li>Panama</li> <li>Andorra</li> </ul>
    你做echo password_hash('passone')
  3. 也就是说,您在明文密码和文本文件中使用哈希密码时使用password_verifyif ($_POST['pass'] == $item[0])在哈希过程中创建随机盐。 这个随机盐是它返回的gobbledygook字符串的一部分!您需要在比较期间重用该随机盐。 if (password_verify($_POST['pass'], $item[0]))会照顾你。

    这就是所需要的一切。

答案 1 :(得分:1)

哦,你应该使用isset,否则你可能会得到PHP错误。你应该打破;找到正确的密码后,其余的只是浪费cpu。

首先创建pass.txt:

<?php
$passes=array(
'passone','passtwo','passthree'
);
foreach($passes as &$pass){
$pass=password_hash($pass,PASSWORD_DEFAULT);
}
file_put_contents("pass.txt",implode("\n",$passes));

然后做

<?php

$data = file_get_contents('pass.txt');

if(array_key_exists('pass',$_POST)){
    $lines = explode("\n", $data);
    for($i = 0; $i<count($lines); $i++) {
        if(password_verify($_POST['pass'],$lines[$i])) {
            echo "Welcome! You're logged in!";
            break;
        }
    }
}

else { echo '<form method="POST" action="">
            <input type="password" name="pass">
            <input type="submit">
            <form>';
}
  • 警告的话。个人而言,我不喜欢password_hash,因为它不容易与用其他语言编写的应用程序集成(在我的场景中为c ++),哈希结构没有明确定义(据我所知),缺少阅读php解释器&# 39; s源代码..