我的密码通过php脚本user.php从我的iPhone应用程序传递到数据库。
变量$ pass由以下内容填充:
$pass = str_replace("'", "", $_REQUEST['pass']);
如何在插入数据库之前对其进行加密?我已经阅读了一些关于不同技术的内容,但寻找管理它的最佳方法。
感谢大家。
答案 0 :(得分:7)
答案 1 :(得分:7)
虽然下面的答案在技术上仍然正确,但php有关于要使用的散列算法的新建议。 Their recommendation,从php> = 5.5.0开始,是使用password_hash
和password_verify
函数来散列和验证散列密码。作为额外的好处,这些函数会自动将个性化的salt作为返回哈希的一部分,因此您无需明确担心。
$pass = sha1($_REQUEST['pass']);
有一点,为了使其更安全,可以在哈希中添加一个盐并再次运行哈希函数。这使得恶意生成密码哈希变得更加困难,因为盐值仅在服务器端处理
示例:强>
$pass = sha1(sha1($_REQUEST['pass']).sha1("mySalt@$#(%"));
答案 2 :(得分:2)
首先,您应该创建一个随机用户salt。然后你应该将它和密码哈希存储在数据库中。
$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
}
为每个帐户创建一个用户salt可确保彩虹表无用,任何闯入服务器的人都必须强制使用每个密码。
答案 3 :(得分:1)
最基本的:用MD5或SHA1
哈希$newpass = md5($_REQUEST['pass']);
或
$newpass = sha1($_REQUEST['pass']);
最近我开始存储用户名哈希值,因此只使用散列数据进行比较,登录尝试是安全的。
你可以用额外的数据“加盐”哈希值,所以如果它们被泄露,就找不到它的值(尝试用谷歌搜索一些简单的哈希词)...即使用一个站点范围的字符串来改变标准哈希值,如{{ 1}}或更高级的东西。
答案 4 :(得分:1)
使用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));
on http://www.ibm.com/developerworks/opensource/library/os-php-encrypt/
答案 5 :(得分:0)
您应该使用SHA1哈希密码以存储在数据库中。这是存储密码的最简单但最有效的方法:
$password = sha1($password);
它也非常安全。虽然它的完整性已经开始蔓延,但将此功能升级到SHA-256(非常安全)非常容易。
答案 6 :(得分:0)
要了解为什么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。