【问题标题】:Comparing two md5 encryption keys in PHP [closed]比较 PHP 中的两个 md5 加密密钥 [关闭]
【发布时间】:2019-09-04 09:45:34
【问题描述】:

为什么在比较两个相等的 md5 键后显示incorrent password

<?php

if (isset($_POST['user_password']) && !empty($_POST['user_password'])) {
  $user_password = $_POST['user_password'];
  echo $user_passkey = md5($user_password).'<br>';

  $filename = 'hash.txt';
  $handle = fopen($filename, 'r');
  echo $file_password  = fread($handle, filesize($filename));

  if ($user_passkey==$file_password) {
    echo 'correct password';
  } else {
    echo 'Incorrect Password';
  }

} else {
  echo 'Please enter a password';
}

?>
<form action="index.php" method="POST">
  Password:
  <input type="text" name="user_password"><br><br>
  <input type="submit" value="Submit">
</form>

另一个 md5 创建的文件是:

<?php 
$string = 'password';
$string_hash = md5($string);
echo $string_hash;
?>

加密的密钥保存在同一文件夹中另一个名为 hash.txt 的文件中。 echo $user_passkey 和 echo $file_password 都显示了准确的哈希密钥(为用户输入和先前加密的密钥文件 hash.txt 提供了相同的“密码”),但未在 if 语句中进行比较。

为什么它不起作用?

【问题讨论】:

  • 当 php has one built in 时,你为什么还要滚动自己的密码哈希?
  • $user_passkey = md5($user_password).'&lt;br&gt;'; 是错误的,因为您将 &lt;br&gt; 添加到哈希中。然后我敢打赌你的文件包含换行符。使用trim(fread($handle, filesize($filename))) 删除它们。附言考虑使用json_encodejson_decode 将多个用户名/密码登录添加到您的文件中。

标签: php md5


【解决方案1】:

它不起作用,因为您从用户输入生成的 md5 哈希恰好在调试输出的末尾有一个 &lt;br&gt;

1) 改变

md5($user_password).'<br>';

md5($user_password);

2) 改变

if ($user_passkey==$file_password)

if ($user_passkey==trim($file_password))

它会告诉你,哈希是相同的,因为它确实是相同的哈希,但是第一个在末尾有换行符,这使它成为一个与另一个不同的字符串。

【讨论】:

  • 如果我删除断线,它仍然显示相同的东西,即两个键不相等
  • 另外,使用md5 散列密码绝对是不安全,请关注php.net/manual/en/faq.passwords.php 以了解改用什么。
  • 你能不能给$user_passkey$file_password做一个var_dump()
  • 实际上当对两个变量使用 var_dump 时,一个显示 string32,另一个显示 string34,但两个加密密钥相同
【解决方案2】:

这就是我要做的

<?php
$filename = 'hash.txt';
  $handle = fopen($filename, 'r');
  echo $file_password  = fread($handle, filesize($filename));
  $name=md5('bimbo');
  if($name==$file_password){
  	echo "string";
  }
?>

<?php

if (isset($_POST['user_password']) && !empty($_POST['user_password'])) {
  $user_password = $_POST['user_password'];
  $user_passkey = md5($user_password);
  $new_userpass=$user_userpass."<br/>";

  $filename = 'hash.txt';
  $handle = fopen($filename, 'r');
  echo $file_password  = fread($handle, filesize($filename));

  if ($user_passkey==$file_password) {
    echo 'correct password';
  } else {
    echo 'Incorrect Password';
  }

} else {
  echo 'Please enter a password';
}

?>
<form action="index.php" method="POST">
  Password:
  <input type="text" name="user_password"><br><br>
  <input type="submit" value="Submit">
</form>

【讨论】:

  • 您还可以修剪文件输出中的空格
【解决方案3】:

一个 md5() 示例

<?php
$str = 'apple';

if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') {
    echo "Would you like a green or red apple?";
}
?>

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 2012-11-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2021-07-19
    • 2019-09-27
    • 2013-01-13
    • 2011-05-24
    相关资源
    最近更新 更多