首页 文章

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

提问于
浏览
0

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

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

"username=user&password=123456"

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

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

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

6 回答

  • 1

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

  • 0

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

  • 0

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

  • 1

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

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

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

  • 1

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

    Create Password

    • 将新密码发送到服务器

    • 哈希密码

    • 将哈希存储在数据库中

    Check Password

    • 将密码发送到服务器

    • 哈希密码

    • 检查哈希值是否与数据库中存储的哈希值匹配

    为此你应该使用像SHA256这样的东西:

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

相关问题