PHP如何在数据库中保护密码

时间:2013-11-05 13:30:17

标签: php passwords

我正在使用来自其他服务器(不是我的服务器)的数据,我需要登录此服务器。所以我需要知道每个用户帐户的密码。我需要通过HTTP请求将此密码发送到服务器(没问题)。但服务器期望密码不安全。

因此,如果密码是'123456',我必须发送带有数据的POST请求:

"username=user&password=123456"

我不能使用md5功能因为之后我无法取回密码所以我的问题是如何编码这个密码?是否存在一些常见的PHP函数?例如:

$securePassword = php_encode("123456", "mykey")
php_decode($securePassword, "mykey")

因为我只是不想存储到我的数据库“123456”

6 个答案:

答案 0 :(得分:1)

散列的要点是你不能解密它。要检查是否有人输入了正确的密码,请对他们输入的内容进行哈希处理,并将其与数据库中密码的哈希值进行比较。如果匹配,则密码正确;否则,这是错的。此外,只要您使用SSL和合适的哈希算法,您就应该是安全的。

答案 1 :(得分:1)

如果你有PHP> 5.5,你可以使用函数password_hash。如果您的版本低于PHP 5.3.7,则应使用password compat

答案 2 :(得分:1)

使用mcrypt_encrypt()mcrypt_decrypt()
了解更多信息SO POST

答案 3 :(得分:0)

您要找的不是如何保护密码,而是如何保护密码的传输。您可以使用传输层安全性(也称为TLS又称SSL)执行此操作。

也就是说,不建议以这种方式传输密码,应该设计出更好的机制。如果您对密码进行加密或散列并传输密文,则无法提供 ,因为攻击者只会像您一样发送密文。

您需要加密传输中的数据。在您的网站上获取SSL设置。

答案 4 :(得分:0)

答案 5 :(得分:0)

密码是经过哈希处理而不是加密的原因。您无法解密哈希。通常,惯例是执行以下操作:

创建密码

  1. 将新密码发送到服务器
  2. 哈希密码
  3. 将哈希值存储在数据库中
  4. 检查密码

    1. 将密码发送到服务器
    2. 哈希密码
    3. 检查哈希值是否与数据库中存储的哈希相匹配
    4. 为此你应该使用像SHA256这样的东西:

      // check password
      $hash = hash('sha256', $password);
      $db_hash = db_get_password($username, ...);
      if ($hash == $db_hash) { 
          // correct password
      }