学编程,来源栈;先学习,再交钱
当前系列: 垃圾桶 修改讲义




密码保护

在cookie中直接存放Name(或者Id)是不行的,因为cookie是完全可以“伪造”的!(演示)

所以,在cookie中要同时存储一个不能被伪造的,能证明用户合法身份的信息,最常用的就是密码。

但是,直接把密码(以明文形式)存放在cookie中是非常危险的。所以,我们需要对密码进行加密。


注意:从一开始存储密码就绝对不能使用明文,否则数据库一旦泄漏,不仅影响当前网站,也会影响到其他非常多的网站——因为用户通常都是使用相同的用户名和密码登录不同的网站。(见:CSDN数据泄露案告破


加密通常使用MD5单向加密算法。

MD5属于Hash算法(复习:Https),具有三个特点:

  1. 同样的字符串加密之后结果一定相同
  2. 不同的字符串加密之后的结果一定不会相同
  3. 不可逆:无法根据加密过后的结果“倒推”未加密信息(即使知道加密算法!)

    思考:明白为什么现在的网站都不能“找回密码”,只能“重置密码”了么?

ASP.NET Core中使用MD5的方法如下:

    //MD5实现了IDisposable
    using (MD5 md5Hash = MD5.Create())
    {
        //1. 将字符串转换成byte[]
        //2. 进行MD5加密运算
        byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes("17bang" + input));

        //StringBuilder提高性能(其实也提高了可读性)
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        return sBuilder.ToString();
    }

复习:

  • byte和char:数值/字符
  • using和IDisposable:释放资源
  • StringBuilder
  • ToString("x2"):十六进制

加密的具体实现留给同学们在作业中完成。


注意:如果用户电脑本身已经被入侵,服务器端无法保证用户安全。

所以,一些高度敏感操作,还是需要再次输入用户名和密码(甚至更严格的操作,比如选择你的n个好友……)




课间作业:

  1. 事实上有没有激活?
  2. 为什么需要:if (!string.IsNullOrEmpty(id) && !string.IsNullOrEmpty(code))
补充:exception



作业

  1. 在完成Email激活之后,实现通过Email 找回密码 的功能



原需求:可以使用邮箱找回密码,点击发送邮件获取验证码,用验证码重置密码,重置密码的邮件会发送到你填写的Email中。
问题:

  1. 找回密码的入口(页面)在哪里?页面内容如何?
  2. 发送邮件如何获取验证码?弹出提示吗?
  3. 如何用验证码重置密码?需要自己填写吗?
  4. 邮箱是找回密码时填写,还是注册时填写
学习笔记
源栈学历
键盘敲烂,月薪过万作业不做,等于没学

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 垃圾桶 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码