《用户权限管理.pptx》由会员分享,可在线阅读,更多相关《用户权限管理.pptx(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、在Windows应用程序中能够完成用户权限管理的设计与开发。教学目标教学重点教学难点v盐值和散列v多层实体v权限管理实现的思路v用户密码加密存储第1页/共25页一、权限管理的实现思路一、权限管理的实现思路 用户用户 角色角色 权限权限第2页/共25页-角色-管理员管理员来自教师资料来自教师资料 教务人员教务人员来自教师资料来自教师资料 教师教师来自教师资料来自教师资料 学生学生来自学生资料来自学生资料第3页/共25页-权限-教师资料管理教师资料管理查询查询(0)(0)、管理、管理(1)(1)学生资料管理学生资料管理查询查询(2)(2)、管理、管理(3)(3)课程资料管理课程资料管理查询查询(4
2、)(4)、管理、管理(5)(5)教学任务分配教学任务分配查询查询(6)(6)、管理、管理(7)(7)教学计划安排教学计划安排查询查询(8)(8)、管理、管理(9)(9)考试成绩管理考试成绩管理查询查询(10)(10)、录入、录入(11)(11)、修改、修改(12)(12)用户权限管理用户权限管理查询查询(13)(13)、管理、管理(14)(14)数据备份数据备份备份备份(15)(15)、还原、还原(16)(16)第4页/共25页-角色权限-教师资料管理教师资料管理查询查询(0)(0)、管理、管理(1)(1)学生资料管理学生资料管理查询查询(2)(2)、管理、管理(3)(3)课程资料管理课程资料
3、管理查询查询(4)(4)、管理、管理(5)(5)教学任务分配教学任务分配查询查询(6)(6)、管理、管理(7)(7)教学计划安排教学计划安排查询查询(8)(8)、管理、管理(9)(9)考试成绩管理考试成绩管理查询查询(10)(10)、录入、录入(11)(11)、修改、修改(12)(12)用户权限管理用户权限管理查询查询(13)(13)、管理、管理(14)(14)数据备份数据备份备份备份(15)(15)、还原、还原(16)(16)第5页/共25页三个状态三个状态 1 1:允许项:允许项 0 0:可选项:可选项-1-1:禁止项:禁止项第6页/共25页数据库结构第7页/共25页第8页/共25页二、用
4、户密码加密存储二、用户密码加密存储 思考:思考:思考:思考:大多数开发人员使用数据库存储密码,如果密码直接以明文的形式存放在数据库中,则系统很不安全。大多数开发人员使用数据库存储密码,如果密码直接以明文的形式存放在数据库中,则系统很不安全。第9页/共25页散列散列 散列简介散列简介 散列(散列(HashHash)是一种单向算法,一旦数据被转换,将无法再获得其原始值。)是一种单向算法,一旦数据被转换,将无法再获得其原始值。可以使用散列算法对密码进行加密,然后再将其存储在数据库中。可以使用散列算法对密码进行加密,然后再将其存储在数据库中。思考:验证用户密码的流程是怎样?思考:验证用户密码的流程是怎
5、样?第10页/共25页散列散列 用户输入密码后,可以再次使用散列算法对其进行转换,然后将其与存储在数据库中用户输入密码后,可以再次使用散列算法对其进行转换,然后将其与存储在数据库中的散列进行比较。的散列进行比较。第11页/共25页散列散列 散列的特点之一是,即使原始数据只发生一个小小的改动,数据的散列也会发生非常散列的特点之一是,即使原始数据只发生一个小小的改动,数据的散列也会发生非常大的变化。大的变化。Rickie Rickie 和和 Ricky Ricky 这两个单词非常相似,但使用散列算法加密后的结果这两个单词非常相似,但使用散列算法加密后的结果却相差甚远。你可能根本看不出二者之间有什么
6、相似之处。却相差甚远。你可能根本看不出二者之间有什么相似之处。第12页/共25页散列散列.NET.NET 开发人员可以使用多种散列算法类。最常用的是开发人员可以使用多种散列算法类。最常用的是 SHA1 SHA1 和和 MD5MD5。下面我们看。下面我们看一下如何为一下如何为RickieRickie这样的普通字符串生成散列,使任何人都无法识别它。这样的普通字符串生成散列,使任何人都无法识别它。第13页/共25页(1)使用)使用SHA1生成散列生成散列 bytebytePassword=null;/创建新的加密服务提供程序对象SHA1sha1=SHA1.Create();/将原始字符串转换成字节数
7、组,然后计算散列,并返回一个字节数组bytePassword=sha1.ComputeHash(Encoding.Unicode.GetBytes(Rickie);/释放资源sha1.Clear();/返回散列值的Base64编码字符串Console.WriteLine(Convert.ToBase64String(bytePassword);第14页/共25页如此可见,输入字符串的一个小小变化就会产生完全不同的字符组合。这正是散列算法之所以有效的原因,它使我们很难找到输入字符串的规律,也很难根据加密后的字符弄清楚字符串原来的模样。第15页/共25页(2)使用)使用MD5也可以生成散列也可以生
8、成散列bytebytePassword=null;stringtmpPassword=txtPassword.Text.Trim();MD5md5=MD5.Create();bytePassword=md5.ComputeHash(Encoding.Unicode.GetBytes(tmpPassword);/ReleasesallresourcesusedbytheSystem.Security.Cryptography.HashAlgorithm.md5.Clear();txtResults.Text=Convert.ToBase64String(bytePassword);第16页/共2
9、5页思考:思考:如果两个用户碰巧使用相同的密码,那么散列值将完全相同。如果黑客看到您存储密码的表格,会从中找到规律并明白您很可能使用了常见的词语,然后黑客会开始词典攻击以确定这些密码。第17页/共25页要确保任何两个用户密码的散列值都不相同,一种方法是在加密密码之前,在每个用户的密码中添加一个唯一的值。这个唯一值称为“盐”值(Salt)。思考:在验证密码时,如何得到这个“盐”值。第18页/共25页生成生成salt值值bytesaltValue=newbytesaltLength;RNGCryptoServiceProviderrng=newRNGCryptoServiceProvider();
10、/用加密型强随机字节填充的数组rng.GetBytes(saltValue);第19页/共25页byterawSalted=newbyteunsaltedPassword.Length+saltValue.Length;unsaltedPassword.CopyTo(rawSalted,0);saltValue.CopyTo(rawSalted,unsaltedPassword.Length);SHA1sha1=SHA1.Create();bytesaltedPassword=sha1.ComputeHash(rawSalted);bytedbPassword=newbytesaltedPas
11、sword.Length+saltValue.Length;saltedPassword.CopyTo(dbPassword,0);saltValue.CopyTo(dbPassword,saltedPassword.Length);第20页/共25页passwordunsaltedPasswordSHA1saltValue rawSalted SaltedPassword dbPassword 随机生成合并合并SHA1202442024密码生成密码生成第21页/共25页密码验证密码验证passwordunsaltedPasswordSHA1saltValue SaltedPassword dbPassword 分解20244rawSalted 合并24SaltedPassword 比较合并第22页/共25页密码存储格式密码存储格式 在在SQLServer2000SQLServer2000中存为中存为binary(24)binary(24)第23页/共25页三、案例:高校教学管理系统三、案例:高校教学管理系统 见程序见程序第24页/共25页感谢您的观看!第25页/共25页
限制150内