我有一个密码从我的iPhone应用程序通过php脚本user.php传递给数据库。在存入数据库之前加密密码?
变量$传球被填充如下:
$pass = str_replace("'", "", $_REQUEST['pass']);
我怎样才能加密此它插入到我的数据库之前?我读了一些关于不同的技术,但寻找最好的方法来管理这个。
感谢大家。
我有一个密码从我的iPhone应用程序通过php脚本user.php传递给数据库。在存入数据库之前加密密码?
变量$传球被填充如下:
$pass = str_replace("'", "", $_REQUEST['pass']);
我怎样才能加密此它插入到我的数据库之前?我读了一些关于不同的技术,但寻找最好的方法来管理这个。
感谢大家。
如果你不关心检索的实际密码的值(从数据库加密后的值),你可以在它上面运行单向散列算法(如sha1:http://php.net/manual/en/function.sha1.php)。该函数将返回一个特定长度的字符串(散列),它不能用于查找原始字符串(理论上)。有可能两个不同的字符串可以创建相同的散列(称为冲突),但这不应该是密码问题。
例子: $pass = sha1($_REQUEST['pass']);
一件事,让它多一点安全是盐添加到哈希并再次运行哈希函数。这使得恶意地生成密码哈希变得更加困难,因为盐值仅在服务器端处理。
例子:
的最基本的:用MD5或SHA-1
$newpass = md5($_REQUEST['pass']);
或
$newpass = sha1($_REQUEST['pass']);
最近,我开始进行存储散列以及用户名散列,所以登录尝试是安全的只使用散列数据进行比较。
你可以用额外的数据“散布”哈希,所以如果它们被破坏,它的价值无法找到(尝试使用谷歌搜索一些简单的散列字)..即使用一个站点范围的字符串只是为了改变标准哈希,如md5("mySiteSalt!!" . $_REQUEST['pass']);
或更先进的东西。
使用crypt一些盐。如
$user = strip_tags(substr($_REQUEST['user'],0,32));
$plain_pw = strip_tags(substr($_REQUEST['pass'],0,32));
$password = crypt(md5($plain_pw),md5($user));
上http://www.ibm.com/developerworks/opensource/library/os-php-encrypt/
您应该使用SHA1哈希您的密码存储在数据库中。这是存储密码的最简单但最有效的方式:
$password = sha1($password);
这也是特别安全。虽然它的完整性开始蔓延,但将此功能升级到SHA-256(这非常安全)相当容易。
要找出原因MD5,SHA1和他们迅速的朋友可能不是一个好主意,你应该阅读由Thomas Ptacek后Enough With The Rainbow Tables: What You Need To Know About Secure Password Schemes。要点:
最后,我们了解到,如果我们想 存储密码安全,我们有三个 合理的选择:PHK的MD5方案, Provos-Maziere的Bcrypt方案,并 SRP。我们了解到,正确的 选择是Bcrypt。
注:这是PHK,而不是PHP。
首先,你应该创建一个随机的用户盐。然后,您应该将该密码和密码哈希存储在数据库中。
$salt = md5(unique_id().mt_rand().microtime());
$pass = sha1($salt.$_REQUEST['pass']);
并在数据库中保存$ salt和$ pass。然后,当他们去登录你看他们的行和检查哈希:
$user = query('SELECT * FROM `user` WHERE username = ?', array($_REQUEST['username']));
if($user)
{
// If the password they give maches
if($user->pass === sha1($user->salt. $_REQUEST['pass']))
{
// login
}
else
{
// bad password
}
}
else
{
// user not found
}
创建为每个帐户确保彩虹表是无用的,任何人闯入你的服务器的用户盐会有暴力破解每个密码。
无关:使用正确的输入逃逸,不靠'str_replace'过滤掉所有引号 – knittl 2010-10-20 20:46:17
它是从一个iPhone应用程序来,通过URL传递给脚本。 – BigMike 2010-10-20 20:50:33
另见的OpenWall的[便携式PHP的密码哈希框架(http://www.openwall.com/phpass/)(PHPass)。它强化了对用户密码的一些常见攻击。 – jww 2014-10-11 23:34:57