首页 > 解决方案 > 比较 PHP 中的两个 md5 加密密钥

问题描述

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

<?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 语句中进行比较。

为什么它不能用作意图?

标签: phpmd5

解决方案


它不起作用,因为您从用户输入生成的 md5 哈希恰好在<br>最后有一个,来自您的调试输出。

1) 改变

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

md5($user_password);

2) 改变

if ($user_passkey==$file_password)

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

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


推荐阅读