2010-10-23 226 views
0

我必须创建一个登录模块(问题不是语言特定的),但我不知道如何验证用户。我在哪里以及如何存储密码。我将不得不加密和解密我的密码,如果是的话,建议最好的方法是什么?总的来说,我需要知道我需要开发哪些用户可以安全登录以访问我的网站的登录模块。如何创建一个登录模块

回答

3

您不需要解密您的密码以验证它们,只需一种加密方式就可以正常工作。这个想法是,当用户输入密码时,你可以用相同的方法(使用相同的算法和“salt”)对它进行加密,然后与存储在数据库中的加密密码进行比较。如果它们相等,很有可能意味着它是相同的原始密码。因此,您可以防止任何人 - 管理员或任何攻击者 - 知道用户在您的网站上使用的原始密码。至于其余部分,它非常简单,你的数据库中有一张表,其中包含用户登录,加密密码以及可能的一些配置文件信息(全名等)。

我通常用下面的函数来散列用户密码:

$password_hash = sha1(MY_SALT_1 . $login_name . MY_SALT_2 . 
    $password . MY_SALT_3); 

其中MY_SALT_ *是任意的预定义的字符串,可以是例如'黑暗','侧面','月亮'(或者实际上越不相关 - 越好)。

+0

对此感到遗憾,但让我们说用户输入的密码表单提交后,我从请求params收到密码。现在按照你我应该加密他们,并与db中的密码进行比较吧?还是不止于此。 – 2010-10-23 10:10:06

+0

首先你需要输入登录名并在数据库中查找。一旦找到了所需的行,请确保用户输入了正确的密码。这是您从表单中获取密码的地方,将其散列并与存储在数据库中的密码进行比较。如果它们是真实的,则意味着用户输入的密码与他/她在您的网站上注册时相同。很明显,当用户首先在你的网站上注册时,你需要以同样的方式对他/她的密码进行哈希处理。 – mojuba 2010-10-23 10:14:23

+0

因此,当用户尝试登录其未加密的密码时,密码从浏览器传输到服务器是安全的。请不要介意它是否听起来很愚蠢。 – 2010-10-23 10:39:12

0

是的。你需要加密用户的密码。因为大多数用户使用相同的密码几乎所有的网站。当时他们不想显示密码给管理员。另一个原因是大多数时间站点数据库不仅可以由管理员访问,还可以在组织中访问其他技术人员。因此,最好对密码进行加密。SHA1是进行加密的最佳方式。
Where and how will i store the passwords.
我不确定这是什么意思。每个人都使用它的数据库,如phpmyadmin。