1、 本讲内容本讲内容权限管理的实现思路权限管理的实现思路.NET.NET.NET.NET框框架架编编程程技技术术WindowsWindows应用程序中应用程序中用户权限管理的实现用户权限管理的实现6主讲:屠添翼案例:高校教学管理系统案例:高校教学管理系统用户密码加密存储用户密码加密存储v在在Windows应用程序中能够完成用户权限管理的应用程序中能够完成用户权限管理的设计与开发。设计与开发。教学目标教学重点教学难点v盐值和散列盐值和散列v多层实体多层实体v权限管理实现的思路权限管理实现的思路v用户密码加密存储用户密码加密存储一、权限管理的实现思路一、权限管理的实现思路vv用户用户vv角色角色vv
2、权限权限-角色角色-vv管理员管理员来自教师资料来自教师资料vv教务人员教务人员来自教师资料来自教师资料vv教师教师来自教师资料来自教师资料vv学生学生来自学生资料来自学生资料-权限权限-vv教师资料管理教师资料管理教师资料管理教师资料管理查询查询查询查询(0)(0)、管理、管理、管理、管理(1)(1)vv学生资料管理学生资料管理学生资料管理学生资料管理查询查询查询查询(2)(2)、管理、管理、管理、管理(3)(3)vv课程资料管理课程资料管理课程资料管理课程资料管理查询查询查询查询(4)(4)、管理、管理、管理、管理(5)(5)vv教学任务分配教学任务分配教学任务分配教学任务分配查询查询查询
3、查询(6)(6)、管理、管理、管理、管理(7)(7)vv教学计划安排教学计划安排教学计划安排教学计划安排查询查询查询查询(8)(8)、管理、管理、管理、管理(9)(9)vv考试成绩管理考试成绩管理考试成绩管理考试成绩管理查询查询查询查询(10)(10)、录入、录入、录入、录入(11)(11)、修改、修改、修改、修改(12)(12)vv用户权限管理用户权限管理用户权限管理用户权限管理查询查询查询查询(13)(13)、管理、管理、管理、管理(14)(14)vv数据备份数据备份数据备份数据备份备份备份备份备份(15)(15)、还原、还原、还原、还原(16)(16)-角色权限角色权限-vv教师资料管理
4、教师资料管理教师资料管理教师资料管理查询查询查询查询(0)(0)、管理、管理、管理、管理(1)(1)vv学生资料管理学生资料管理学生资料管理学生资料管理查询查询查询查询(2)(2)、管理、管理、管理、管理(3)(3)vv课程资料管理课程资料管理课程资料管理课程资料管理查询查询查询查询(4)(4)、管理、管理、管理、管理(5)(5)vv教学任务分配教学任务分配教学任务分配教学任务分配查询查询查询查询(6)(6)、管理、管理、管理、管理(7)(7)vv教学计划安排教学计划安排教学计划安排教学计划安排查询查询查询查询(8)(8)、管理、管理、管理、管理(9)(9)vv考试成绩管理考试成绩管理考试成绩
5、管理考试成绩管理查询查询查询查询(10)(10)、录入、录入、录入、录入(11)(11)、修改、修改、修改、修改(12)(12)vv用户权限管理用户权限管理用户权限管理用户权限管理查询查询查询查询(13)(13)、管理、管理、管理、管理(14)(14)vv数据备份数据备份数据备份数据备份备份备份备份备份(15)(15)、还原、还原、还原、还原(16)(16)三个状态三个状态 1 1:允许项:允许项:允许项:允许项 0 0:可选项:可选项:可选项:可选项-1-1:禁止项:禁止项:禁止项:禁止项数据库结构数据库结构二、用户密码加密存储二、用户密码加密存储vv思考:思考:vv大多数开发人员使用数据库
6、存储密码,如果大多数开发人员使用数据库存储密码,如果密码直接以明文的形式存放在数据库中,则密码直接以明文的形式存放在数据库中,则系统很不安全。系统很不安全。散列vv散列简介散列简介vv散列(散列(Hash)是一种单向算法,一旦数据被)是一种单向算法,一旦数据被转换,将无法再获得其原始值。转换,将无法再获得其原始值。vv可以使用散列算法对密码进行加密,然后再可以使用散列算法对密码进行加密,然后再将其存储在数据库中。将其存储在数据库中。vv思考:验证用户密码的流程是怎样?思考:验证用户密码的流程是怎样?散列vv用户输入密码后,可以再次使用散列算法对用户输入密码后,可以再次使用散列算法对其进行转换,
7、然后将其与存储在数据库中的其进行转换,然后将其与存储在数据库中的散列进行比较。散列进行比较。散列vv散列的特点之一是,即使原始数据只发生一散列的特点之一是,即使原始数据只发生一个小小的改动,数据的散列也会发生非常大个小小的改动,数据的散列也会发生非常大的变化。的变化。Rickie和和 Ricky这两个单词非常相这两个单词非常相似,但使用散列算法加密后的结果却相差甚似,但使用散列算法加密后的结果却相差甚远。你可能根本看不出二者之间有什么相似远。你可能根本看不出二者之间有什么相似之处。之处。散列vv.NET开发人员可以使用多种散列算法类。最开发人员可以使用多种散列算法类。最常用的是常用的是 SHA
8、1和和 MD5。下面我们看一下如。下面我们看一下如何为何为Rickie这样的普通字符串生成散列,使任这样的普通字符串生成散列,使任何人都无法识别它。何人都无法识别它。(1)使用)使用SHA1生成散列生成散列v bytebytePassword=null;v/创建新的加密服务提供程序对象创建新的加密服务提供程序对象vSHA1sha1=SHA1.Create();v/将原始字符串转换成字节数组,然后计算散列,并返回一将原始字符串转换成字节数组,然后计算散列,并返回一个字节数组个字节数组vbytePassword=sha1.ComputeHash(Encoding.Unicode.GetBytes(
9、Rickie);v/释放资源释放资源vsha1.Clear();v/返回散列值的返回散列值的Base64编码字符串编码字符串vConsole.WriteLine(Convert.ToBase64String(bytePassword);v如此可见,输入字符串的一个小小变化就会如此可见,输入字符串的一个小小变化就会产生完全不同的字符组合。这正是散列算法产生完全不同的字符组合。这正是散列算法之所以有效的原因,它使我们很难找到输入之所以有效的原因,它使我们很难找到输入字符串的规律,也很难根据加密后的字符弄字符串的规律,也很难根据加密后的字符弄清楚字符串原来的模样。清楚字符串原来的模样。(2)使用)使
10、用MD5也可以生成散列也可以生成散列vbytebytePassword=null;vstringtmpPassword=txtPassword.Text.Trim();vMD5md5=MD5.Create();vbytePassword=md5.ComputeHash(Encoding.Unicode.GetBytes(tmpPassword);v/ReleasesallresourcesusedbytheSystem.Security.Cryptography.HashAlgorithm.vmd5.Clear();vtxtResults.Text=Convert.ToBase64String
11、(bytePassword);思考:v如果两个用户碰巧使用相同的密码,那如果两个用户碰巧使用相同的密码,那么散列值将完全相同。如果黑客看到您么散列值将完全相同。如果黑客看到您存储密码的表格,会从中找到规律并明存储密码的表格,会从中找到规律并明白您很可能使用了常见的词语,然后黑白您很可能使用了常见的词语,然后黑客会开始词典攻击以确定这些密码。客会开始词典攻击以确定这些密码。v要确保任何两个用户密码的散列值都不相同,要确保任何两个用户密码的散列值都不相同,一种方法是在加密密码之前,在每个用户的一种方法是在加密密码之前,在每个用户的密码中添加一个唯一的值。这个唯一值称为密码中添加一个唯一的值。这个唯
12、一值称为“盐盐”值(值(Salt)。)。v思考:在验证密码时,如何得到这个思考:在验证密码时,如何得到这个“盐盐”值。值。生成salt值vbytesaltValue=newbytesaltLength;vRNGCryptoServiceProviderrng=newRNGCryptoServiceProvider();v/用加密型强随机字节填充的数组用加密型强随机字节填充的数组vrng.GetBytes(saltValue);vbyterawSalted=newbyteunsaltedPassword.Length+saltValue.Length;vvunsaltedPassword.Cop
13、yTo(rawSalted,0);vsaltValue.CopyTo(rawSalted,unsaltedPassword.Length);vvSHA1sha1=SHA1.Create();vbytesaltedPassword=sha1.ComputeHash(rawSalted);vvbytedbPassword=newbytesaltedPassword.Length+saltValue.Length;vsaltedPassword.CopyTo(dbPassword,0);vsaltValue.CopyTo(dbPassword,saltedPassword.Length);passw
14、ordunsaltedPasswordSHA1saltValue rawSalted SaltedPassword dbPassword 随机生成随机生成合并合并合并合并SHA1202442024密码生成密码生成密码验证密码验证passwordunsaltedPasswordSHA1saltValue SaltedPassword dbPassword 分解分解20244rawSalted 合并合并24SaltedPassword 比较比较合并合并密码存储格式密码存储格式vv在在SQLServer2000中存为中存为binary(24)三、案例:高校教学管理系统三、案例:高校教学管理系统vv见程序见程序