PHP MYSQL存储密码供PHP调用

PHP MYSQL存储密码供PHP调用,php,mysql,passwords,Php,Mysql,Passwords,我很清楚用明文存储登录名是不安全的,但我一直无法找到我的具体问题的答案。我试图做的是将服务器密码存储在数据库中,以便使用自动php脚本调用。然而,我对数据库被黑客攻击心存疑虑,因此我需要确保在数据库被黑客攻击的情况下无法检索这些密码。和任何项目一样,我计划的是“最坏情况”。密码本身是随机生成的。简短回答: 你不能 稍长一点的回答: 您可以使用可逆加密算法。基本上,不是对密码进行哈希运算(这是不可逆的),而是对密码进行加密 但是,与以纯文本形式存储密码相比,它提供的保护很少。请记住,根据定义,任何

我很清楚用明文存储登录名是不安全的,但我一直无法找到我的具体问题的答案。我试图做的是将服务器密码存储在数据库中,以便使用自动php脚本调用。然而,我对数据库被黑客攻击心存疑虑,因此我需要确保在数据库被黑客攻击的情况下无法检索这些密码。和任何项目一样,我计划的是“最坏情况”。密码本身是随机生成的。

简短回答:

你不能

稍长一点的回答:

您可以使用可逆加密算法。基本上,不是对密码进行哈希运算(这是不可逆的),而是对密码进行加密


但是,与以纯文本形式存储密码相比,它提供的保护很少。请记住,根据定义,任何可逆机制都可以反转,因此,如果您的数据库遭到黑客攻击,那么攻击者可能能够反转您的密码。

使用PHP的
password\u hash()
函数对您的密码进行哈希和加盐,然后将其插入mysql。注意:每次都使用不同的salt,这使得它更加安全——而且您不必将salt存储在数据库中,因为PHP会自动为您存储它

// hash and salt...
$password = password_hash($your_random_password, PASSWORD_DEFAULT);

现在,根据mysql中存储的密码检查您的随机密码(从上面的步骤),看看它是否合法

if(password_verify($your_random_password, $row->passwd)) {
    echo 'password is legit';
} else {
    echo 'not legit';
}

有关使用PHP进行散列的更多信息,请参见本文

如果您必须返回密码才能使用密码自动登录到其他系统,那么最安全的方法是:


方法1

1:在服务器上的文档根目录之外有一个文件,其中包含一个生成加密密钥的可复制方法—对密码创建时间进行散列

2:使用从脚本生成的密钥,将密码存储在使用AES_ENCRYPT加密的
BLOB
字段中

3:确保您始终使用这些密码与登录的任何系统建立SSL连接,并且当PHP与数据库通信时,它要么在同一台机器/机架上,要么使用加密线路


方法2(更好,但有附带条件)

如果可以在需要登录的服务器上存储GPG私钥,则可以在将密码输入数据库之前使用其相应的公钥对密码进行加密

然后在需要时将GPG加密的密码传递给这些系统-然后他们可以解密密码并使用它们


这确实意味着您需要控制这些系统,当然才能实现GPG。

这更多地从用户角度处理密码,首先给出正确的明文。感谢您:)散列是一种方法,这样您就无法检索/调用密码-这就是使密码更安全的原因。如果你把它们放进数据库,这样你就能把它们弄出来,那你就是自找麻烦。看看这个:谢谢,我没有想到使用GPG。现在要做的是:)