Login 如何创建登录模块

Login 如何创建登录模块,login,cryptography,Login,Cryptography,我必须创建一个登录模块(问题不是语言特定的),但我不确定如何验证用户。我将在何处以及如何存储密码。我必须加密和解密我的密码吗?如果是,建议最好的方法是什么。总的来说,我需要知道开发登录模块时需要注意哪些事项,用户可以安全登录以访问我的网站。是的。确实需要加密用户密码。因为大多数用户使用相同的密码几乎所有网站。当时他们不想向管理员显示密码。另一个原因是大多数情况下,站点数据库可能不仅由管理员、组织中的其他技术人员访问。因此,最好对密码进行加密。SHA1是进行加密的最佳方式。 我将在何处以及如何存储

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

是的。确实需要加密用户密码。因为大多数用户使用相同的密码几乎所有网站。当时他们不想向管理员显示密码。另一个原因是大多数情况下,站点数据库可能不仅由管理员、组织中的其他技术人员访问。因此,最好对密码进行加密。SHA1是进行加密的最佳方式。
我将在何处以及如何存储密码。


我不知道你这是什么意思。每个人都像phpmyadmin一样使用数据库。

是的。你确实需要加密用户密码。因为大多数用户使用相同的密码几乎所有站点。当时他们不想向管理员显示密码。另一个原因是,大多数时候,站点数据库可能不仅仅由管理员访问管理员。组织中的其他一些技术人员。因此最好加密密码。SHA1是进行加密的最佳方式。
我将在何处以及如何存储密码。


我不知道你说的是什么意思。每个人都像phpmyadmin一样使用数据库。

你不需要解密密码来验证密码,只有一种方式的加密就可以了。其思想是,当用户输入密码时,您以相同的方式(使用相同的算法和“salt”)对其进行加密,然后与存储在数据库中的加密密码进行比较。如果它们相等,很有可能意味着它是相同的原始密码。因此,您可以防止任何人(管理员或任何攻击者)知道用户在您的网站上使用的原始密码

至于其余的,很简单,数据库中有一个表,其中包含用户登录名、加密密码,可能还有一些配置文件信息(全名等)

我通常使用以下函数散列用户密码:

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

其中MY_SALT是任意预定义的字符串,可以是例如“黑暗”、“月亮的一面”(或者实际上相关性越小越好)。

您不需要解密密码来验证密码,只有一种加密方式可以实现这一点。其思想是,当用户输入密码时,您以相同的方式(使用相同的算法和“salt”)对其进行加密,然后与存储在数据库中的加密密码进行比较。如果它们相等,很有可能意味着它是相同的原始密码。因此,您可以防止任何人(管理员或任何攻击者)知道用户在您的网站上使用的原始密码

至于其余的,很简单,数据库中有一个表,其中包含用户登录名、加密密码,可能还有一些配置文件信息(全名等)

我通常使用以下函数散列用户密码:

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

其中我的“SALT”是任意预定义的字符串,可以是“黑暗”、“月亮的一面”(或者实际上相关性越小越好)。

很抱歉完全不知道这一点,但假设用户输入密码表单提交,我从请求参数处收到密码。现在按照你说的,我应该加密它们,并将其与db中的密码进行比较,对吗?或者不止这些。首先,您获取登录名并在数据库中查找它。找到行后,需要确保用户输入了正确的密码。在这里,您获取从表单收到的密码,对其进行散列,并将其与存储在数据库中的密码进行比较。如果是euqal,则表示用户输入的密码与他/她在您的网站上注册时的密码相同。显然,当用户首次注册到您的网站时,您需要以相同的方式散列他/她的密码。因此,当用户试图登录其未加密的密码时,密码从浏览器移动到服务器是安全的。如果听起来很愚蠢,请不要介意。表单数据从浏览器到服务器都是未加密的,除非您使用的是HTTPS。现在,您不想在浏览器中散列密码(使用JavaScript),因为在这种情况下,您会泄露散列机密,即“salt”字符串。因此,哈希应该在服务器上进行,但为了提高安全性,您可能至少希望通过HTTPS登录页面:这是大多数网站所做的。但请稍后再讨论,首先在服务器端实现所有功能,因为切换到HTTPS是一个独立且不相关的问题。很抱歉完全不知道这一点,但假设用户输入的密码表单已提交,我从请求参数接收密码。现在按照你说的,我应该加密它们,并将其与db中的密码进行比较,对吗?或者不止这些。首先,您获取登录名并在数据库中查找它。找到行后,需要确保用户输入了正确的密码。在这里,您获取从表单收到的密码,对其进行散列,并将其与存储在数据库中的密码进行比较。如果是euqal,则表示用户输入的密码与他/她在您的网站上注册时的密码相同。显然,当用户首次注册到您的网站时,您需要以相同的方式散列他/她的密码。因此,当用户试图登录其未加密的密码时,密码从浏览器移动到服务器是安全的。如果听起来很愚蠢,请不要介意。表单数据从浏览器到服务器都是未加密的,除非您使用的是HTTPS。现在,您不想在浏览器中散列密码(使用JavaScript),因为在这种情况下,您会泄露散列机密,即“salt”字符串。所以散列应该在se上进行