php hash()与sha512显示相同值的不同结果

时间:2013-08-04 00:06:25

标签: php hash sha512

<?php
date_default_timezone_set('Asia/Kolkata');
$xmlfile='xml/adminpwd.xml';
$xml = simplexml_load_file($xmlfile);

if (!empty($_POST['password'])) {
    extract($_POST);
    if($adminpwd!='this')
        $error="Incorrect Password. Enter the correct password.";
}
?>

<form method='post' action='' name='admin'>
<h3 style="color: #798196;">Enter Current Password</h3><br/>
        <input type='password' name='adminpwd' />
        <input type='submit' name='password' value='Enter'>
</form>

这是我的剧本。

当我尝试这个时:

<?php
    if (isset($error))
        echo "<br/><h3 class='error'>".hash('sha512', $adminpwd)."</h3><br/>";
?>

我得到输出: de784a6d81e125ff2223d977683c3efdd4513941d3737861008b8358d10e8d2757963c3a2619d0924a70d0e11b53492847f741af6e767388fd395c170508d795

但是当我尝试这个时:

<?php
    if (isset($error))
        echo "<br/><h3 class='error'>".hash('sha512', $_POST['adminpwd'])."</h3><br/>";
?>

我得到输出: 1fc286c9c7dc733b3a46a21a923c646c14c19bac951d63380ec8d4b3c6786fdbe7dd4bd325eef31553fa829e19989fe060da01921cfc68f7b9ff03383f78710b

虽然两个变量都包含相同的字符串。为什么输出不同?

1 个答案:

答案 0 :(得分:3)

唯一不同的方法是,如果$ _POST ['adminpwd']中的内容不是完全相同的字符串值。因为你没有检查$ adminpwd,所以可能每次都没有设置它。

此外,在$ _POST或任何其他请求变量上使用extract()并不十分安全,因为您实际上是允许用户创建PHP变量。