第04章-数据流与数据的加密和解密详解.ppt

  1. 1、本文档共82页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.3.2 不对称加密 不对称加密也叫公钥加密。 这种技术使用不同的加密密钥与解密密钥 是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。 不对称加密产生的主要原因有两个: 一是为了解决对称加密的密钥管理问题; 二是数字签名需要用不对称加密来实现。 4.3.2 不对称加密 1.不对称加密的实现原理 不对称加密使用一个需要保密的私钥和一个可以对外公开的公钥,即使用“公钥/私钥”对来加密和解密数据。 公钥和私钥都在数学上相关联; 用公钥加密的数据只能用私钥解密,反之,用私钥加密的数据只能用公钥解密。 两个密钥对于通信会话都是唯一的。 公钥加密算法也称为不对称算法,原因是需要用一个密钥加密数据而需要用另一个密钥来解密数据。 4.3.2 不对称加密 注意:对称加密算法使用长度可变的缓冲区,而不对称加密算法使用固定大小的缓冲区,无法像私钥算法那样将数据链接起来成为流。 不对称加密之所以不容易被攻击,关键在于对私钥的管理上。 在对称加密中,发送方必须先将解密密钥传递给接收方,接收方才能解密。 如果能通过某种处理,避免通过网络传递私钥,就可以解决这个问题,不对称加密的关键就在于此。 4.3.2 不对称加密 使用不对称加密算法加密数据后,私钥不是发送方传递给接收方的,而是接收方先生成一个公钥/私钥对,在接收被加密的数据前,先将该公钥传递给发送方。 由于从公钥推导出私钥是不可能的,所以不怕通过网络传递时被攻击者截获公钥从而推导出私钥。 发送方得到此公钥后,使用此公钥加密数据,再将加密后的数据通过网络传递给接收方;接收方收到加密后的数据后,再用私钥进行解密。 由于没有直接传递私钥,从而保证了数据的安全性。 4.3.2 不对称加密 2.常用的不对称加密算法 .NET框架提供了多种实现不对称加密算法的类,支持的不对称加密算法有: (1)RSA算法 (2)ECC算法 4.3.2 不对称加密 (1)RSA算法 RSA加密算法是一种非对称加密算法 1977年由当时在麻省理工学院的Ron Rivest、Adi Shamir和Leonard Adleman一起提出,RSA就是他们三人姓氏开头字母拼在一起组成的。 从1978年开始,该算法在公钥加密标准和电子商业中就已经被广泛使用。 速度是RSA的缺陷,该算法一般只适用于少量数据的加密。 在.NET框架中,System.Security.Cryptography命名空间下的RSACryptoServiceProvider类提供了RSA算法的实现,利用它可实现不对称加密、解密以及数字签名。 4.3.2 不对称加密 (2)ECC算法 ECC(Elliptic Curves Cryptography,椭圆曲线算法)是一种公钥加密算法 与RSA算法相比,ECC算法可以使较短的密钥达到相同的安全程度。 与ECC相关的算法包括ECDSA算法、ECDH算法等。 在.NET框架中,System.Security.Cryptography命名空间下的ECDiffieHellmanCng类提供了椭圆曲线ECDSA算法的下一代加密技术(CNG)的加密实现,利用该类可直接用ECDSA算法实现不对称加密和解密。 4.3.3 密钥容器 不论是对称加密还是非对称加密,都有如何保存密钥的问题。 比如我们常见的让用户自己记忆密码的办法,如果攻击者也知道了该密码,那么攻击者也一样可以用它来进入系统或者利用它来解密数据,这样一来,加密也就失去了意义。 所以,网络传输中一般不使用让用户记忆密码的办法,而是自动产生密钥。 同时还必须有一种办法,来确保密钥存储的安全性,这就是密钥容器的用途。 4.3.3 密钥容器 1.用密钥容器保存不对称加密的密钥 密钥容器最直接的用途是用它来保存不对称加密的密钥 为了区分是哪一个密钥容器,还需要给每个密钥容器起一个名称。 在System.Security.Cryptography命名空间中,有一个CspParameters类,可以通过该类提供的属性设置获取密钥容器的名称。 4.3.3 密钥容器 如,保存RSA不对称加密的密钥到密钥容器中,以及从密钥容器中获取密钥信息。 注意,保存密钥信息和获取密钥信息使用的是同一段代码。 public static RSACryptoServiceProvider GenRSAFromContainer (string ContainerName) { //创建CspParameters对象,指定密钥容器的名称,用于保存公钥/私钥对 CspParameters cp = new CspParameters( ); //如果不存在名为containerName的密钥容器,则创建它,并初始化cp //如果存在,则直接根据它原来

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档