0

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

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

"username=user&password=123456"

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

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

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

4

6 回答 6

1

如果你的 PHP >5.5,你可以使用函数password_hash。如果你的版本比 PHP 5.3.7 大,你应该使用密码 compat

于 2013-11-05T13:36:16.410 回答
1

哈希的要点是您无法取消加密它。要检查某人是否输入了正确的密码,请对他们输入的内容进行哈希处理,并将其与数据库中密码的哈希值进行比较。如果匹配,则密码正确;否则,这是错误的。此外,只要您使用 SSL 和体面的哈希算法,您就应该是安全的。

于 2013-11-05T13:32:38.210 回答
1

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

于 2013-11-05T13:37:54.270 回答
0

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

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

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

于 2013-11-05T13:35:40.847 回答
0

看看下面的2个功能

http://www.php.net/manual/en/function.mcrypt-encrypt.phphttp://www.php.net/manual/en/function.mcrypt-decrypt.php

于 2013-11-05T13:35:44.650 回答
0

密码被散列而不是加密是有原因的。您无法解密哈希。通常约定是执行以下操作:

创建密码

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

检查密码

  1. 将密码发送到服务器
  2. 哈希密码
  3. 检查哈希是否与存储在数据库中的哈希匹配

为此,您应该使用 SHA256 之类的东西:

// check password
$hash = hash('sha256', $password);
$db_hash = db_get_password($username, ...);
if ($hash == $db_hash) { 
    // correct password
}
于 2013-11-05T13:36:33.923 回答