php - 比较 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 语句中进行比较。
为什么它不能用作意图?
解决方案
它不起作用,因为您从用户输入生成的 md5 哈希恰好在<br>
最后有一个,来自您的调试输出。
1) 改变
md5($user_password).'<br>';
至
md5($user_password);
2) 改变
if ($user_passkey==$file_password)
至
if ($user_passkey==trim($file_password))
它会告诉你,散列是相同的,因为它确实是相同的散列,但第一个在末尾有换行符,这使它成为与另一个不同的字符串。
推荐阅读
- string - 如何确保字符串被赋予正确的格式
- android - 批量更新时会触发多少次 onUpdate 函数?
- python - 如何通过删除 for 循环使代码更快
- odoo - 无法在自定义模块中为普通用户创建记录(只能由管理员访问权限创建)
- c# - 有没有办法为每个项目进行 NuGet 包源设置?
- windows - 扬声器属性和平衡的命令行控制
- linux - 解析错误:第 1 行第 10897 列 EOF 处的数字文字无效
- java - 如果字符串在百里香中包含键,如何设置字符串中的值
- jquery - JQuery onclick 事件不适用于创建的 ID
- angular - Angular 组件中的嵌套输入组