在 PHP 中存储 md5 加密密码有什么意义吗?

Is there any point in storing am md5-encrypted password in PHP?

我根本不是 PHP 程序员,主要是 javascript/design,但我正在修改一些其他人编写的 PHP 代码,我想知道以下:

像下面这样在 config.php 文件中的 md5() 中存储基本登录密码是否有意义?

define("USERNAME", "username");
define("PASSWORD", md5("password"));

我可以理解常量将被加密存储,当它与登录尝试相比时,它会是这样的:

if(PASSWORD == md5($_SERVER['PHP_AUTH_PW'])) ...

但是,我很难看到在这种情况下使用加密有任何好处,因为它不发送加密数据,而只是用它来比较登录尝试。如果我错了,有人能告诉我吗?

如果只有一个用户,并且 his/her 凭据存储在 php 脚本中,那么是的,根本没有理由调用 md5()。 除了一种特定情况,当您出于某些原因可以在 public 可访问页面上执行 var_dump(PASSWORD) 时。 但无论如何,这从一开始就是一个错误的架构。

md5是一种加密方式。它加密普通密码并以加密形式存储在数据库中。以免有人滥用它。是的,在比较登录时,我们双方都需要 md5。插入的密码必须是 md5。如果 md5 密码存储在数据库中。 希望你明白其中的逻辑。

只要密码显示了原始密码,您就没有任何收获。

如果您只在脚本中存储哈希值,那么有权访问代码的人将无法看到原始密码,因此无法登录。

define("PASSWORD", 'db21e1fe1bf92b66ef2363d3c76c62d5');

if (PASSWORD = MD5($_SERVER['PHP_AUTH_PW']))

虽然 MD5 不是散列密码的好选择,但您应该使用预先计算的 BCrypt 值,您可以调用函数 password_hash() 来计算它。

define("PASSWORD", 'y$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa');

if (password_verify($_SERVER['PHP_AUTH_PW'], PASSWORD))

好吧,我们使用散列来保护应用程序免受可能的漏洞,例如(文件下载漏洞),即使您的网络应用程序是安全的并且您使用的是共享主机,他们可以使用符号来查看 php 源文件.

如果您的密码经过哈希处理(md5 ...等),他将在此时查看您的密码,他将尝试破解它(破解 = 暴力破解哈希)或检查哈希数据库。

只有当您使用大字符串并且不使用在线哈希工具(他们会将您的哈希和字符串出售给哈希数据库)时,您的哈希才会受到保护(任何哈希类型)。

不推荐md5,因为流行。

没有必要使用

define("PASSWORD", md5("password"));
if(PASSWORD == md5($_SERVER['PHP_AUTH_PW'])){ echo 'validpass'; }

这就像你在告诉攻击者 'hey my password is the PASSWORD constant'

您应该在 php

中手动散列密码
<?php   
echo md5('YourPassHere').PHP_EOL; 
//a9903eab80299592904956c9f966f4c1 == YourPassHere 
?> 

复制哈希并将其放入(当然你不能使用 md5(); 因为你已经对密码进行了哈希处理)

define("PASSWORD", "a9903eab80299592904956c9f966f4c1");

然后离开

if(PASSWORD == md5($_SERVER['PHP_AUTH_PW'])) { print 'valid pass';}