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