




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第6 6章章 网络数据加密与解密网络数据加密与解密6.1 对称加密对称加密 6.2 不对称加密不对称加密 6.3 通过网络传递加密数据通过网络传递加密数据 6.4 Hash算法与数字签名算法与数字签名 26.1 对称加密对称加密u 对称加密也称为私钥加密,采用私钥算法,对称加密也称为私钥加密,采用私钥算法,加密和解密数据使用同一个密钥。加密和解密数据使用同一个密钥。 u 私钥算法以块为单位加密数据,一次加密私钥算法以块为单位加密数据,一次加密一个数据块。一个数据块。 u .NET类库使用的私钥算法有类库使用的私钥算法有RC2、DES、TripleDES和和Rijndael。这些算法通过加密
2、将。这些算法通过加密将n字字节的输入块转换为加密字节的输出块。如果要节的输入块转换为加密字节的输出块。如果要加密或解密字节序列,必须逐块进行。加密或解密字节序列,必须逐块进行。 3u 为了保证数据的安全,为了保证数据的安全,.NET基类库中提供的基类库中提供的私钥算法类使用称作密码块链(私钥算法类使用称作密码块链(CBC,Cipher Block Chaining)的链模式,算法使用一个密钥和)的链模式,算法使用一个密钥和一个初始化向量(一个初始化向量(IV,Initialization Vector)对数)对数据执行加密转换。密钥和初始化向量据执行加密转换。密钥和初始化向量IV一起决定一起决
3、定如何加密数据,以及如何将数据解密为原始数据。如何加密数据,以及如何将数据解密为原始数据。通信双方都必须知道这个密钥和初始化向量才能通信双方都必须知道这个密钥和初始化向量才能够加密和解密数据。够加密和解密数据。 6.1 对称加密(续)对称加密(续)4u 对称加密算法的优点是保密强度高,加对称加密算法的优点是保密强度高,加、解解密速度快,适合加密大量数据。攻击者如果对加密速度快,适合加密大量数据。攻击者如果对加密后的数据进行破译,惟一的办法就是对每个可密后的数据进行破译,惟一的办法就是对每个可能的密钥执行穷举搜索。而采用这种加密技术,能的密钥执行穷举搜索。而采用这种加密技术,即使使用最快的计算机
4、执行这种搜索,耗费的时即使使用最快的计算机执行这种搜索,耗费的时间也相当长。如果使用较大的密钥,破译将会更间也相当长。如果使用较大的密钥,破译将会更加困难。加困难。 6.1 对称加密(续)对称加密(续)5u 在在.NET Framework中,公共语言运行时中,公共语言运行时CLR使用面向流的设计实现对称加密,该设计的核心使用面向流的设计实现对称加密,该设计的核心是是CryptoStream,实现,实现CryptoStream的任何被加的任何被加密的对象都可以和实现密的对象都可以和实现Stream的任何对象链接起的任何对象链接起来。实现对称加密算法的类有四种:来。实现对称加密算法的类有四种:D
5、ESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider 6.1 对称加密(续)对称加密(续)6四种对称加密类的主要特点四种对称加密类的主要特点 类可用密钥长度(bit)加密算法DESCryptoServiceProvider64DES加密算法RC2CryptoServiceProvider40-128(每8位递增)RC2加密算法RijndaelManaged128-256(每64位递增)Rijndael加密算法TripleDESCryptoServicePro
6、vider128-192(每64位递增)三重DES加密算法7TripleDES加密算法介绍加密算法介绍u TripleDES使用使用DES算法的三次连续迭代,支算法的三次连续迭代,支持从持从128位到位到192位(以位(以64位递增)的密钥长度,其位递增)的密钥长度,其安全性比安全性比DES更高。更高。DES的含义是的含义是Data Encryption Standard,是美国,是美国1977年公布的一种数据加密标准,年公布的一种数据加密标准,DES算法在各超市零售业、银行自动取款机、磁卡算法在各超市零售业、银行自动取款机、磁卡及及IC卡、加油站、高速公路收费站等领域被广泛卡、加油站、高速公
7、路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持应用,以此来实现关键数据的保密,如信用卡持卡人的卡人的PIN的加密传输,的加密传输,IC卡的认证、金融交易数卡的认证、金融交易数据包的据包的MAC校验等,均用到校验等,均用到DES算法。算法。DES算法算法具有非常高的安全性,到目前为止,除了用穷举具有非常高的安全性,到目前为止,除了用穷举搜索法对搜索法对DES算法进行攻击外,还没有发现更有效算法进行攻击外,还没有发现更有效的办法。的办法。 8 例例.使用使用TripleDES加密算法对输入的字符加密算法对输入的字符串进行加密,并输出加密后的字符串和解密后串进行加密,并输出加密后的字
8、符串和解密后的结果。的结果。 9namespace TdesEncryptExample public partial class FormTdesEncrypt : Form public FormTdesEncrypt() InitializeComponent(); private void FormTdesEncrypt_Load(object sender, EventArgs e) textBoxEncrypt.ReadOnly = true; textBoxDecrypt.ReadOnly = true; private void buttonOK_Click(object se
9、nder, EventArgs e) string str = textBoxInput.Text; if (str.Length = 0) MessageBox.Show(请输入被加密的字符串请输入被加密的字符串); return; 10/加密加密 try TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); /随机生成密钥随机生成密钥Key和初始化向量和初始化向量IV tdes.GenerateKey(); tdes.GenerateIV(); textBoxKey.Text = Encodi
10、ng.UTF8.GetString(tdes.Key); /得到加密后的字节流得到加密后的字节流 byte encryptedBytes = EncryptText(str, tdes.Key, tdes.IV); /显示加密后的字符串显示加密后的字符串 textBoxEncrypt.Text = Encoding.UTF8.GetString(encryptedBytes); /解密解密 string decryptString = DecryptText(encryptedBytes, tdes.Key, tdes.IV); /显示解密后的字符串显示解密后的字符串 textBoxDecry
11、pt.Text = decryptString; 11 catch (Exception err) MessageBox.Show(err.Message, 出错出错); private byte EncryptText(string str, byte Key, byte IV) /创建一个内存流创建一个内存流 MemoryStream memoryStream = new MemoryStream(); /使用传递的私钥和使用传递的私钥和IV创建加密流创建加密流 CryptoStream cryptoStream = new CryptoStream(memoryStream, new T
12、ripleDESCryptoServiceProvider().CreateEncryptor(Key, IV), CryptoStreamMode.Write); /将传递的字符串转换为字节数组将传递的字符串转换为字节数组 byte toEncrypt = Encoding.UTF8.GetBytes(str);12 try /将字节数组写入加密流将字节数组写入加密流,并清除缓冲区并清除缓冲区 cryptoStream.Write(toEncrypt, 0, toEncrypt.Length); cryptoStream.FlushFinalBlock(); /得到加密后的字节数组得到加密后
13、的字节数组 byte encryptedBytes = memoryStream.ToArray(); return encryptedBytes; catch (CryptographicException err) throw new Exception(加密出错:加密出错: + err.Message); finally cryptoStream.Close(); memoryStream.Close(); 13 private string DecryptText(byte dataBytes, byte Key, byte IV) /根据加密后的字节数组创建一个内存流根据加密后的字节
14、数组创建一个内存流 MemoryStream memoryStream = new MemoryStream(dataBytes); /使用传递的私钥、使用传递的私钥、IV和内存流创建解密流和内存流创建解密流 CryptoStream cryptoStream = new CryptoStream(memoryStream, new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV), CryptoStreamMode.Read); /创建一个字节数组保存解密后的数据创建一个字节数组保存解密后的数据 byte decryptByt
15、es = new bytedataBytes.Length; try /从解密流中将解密后的数据读到字节数组中从解密流中将解密后的数据读到字节数组中 cryptoStream.Read(decryptBytes, 0, decryptBytes.Length); /得到解密后的字符串得到解密后的字符串 string decryptedString = Encoding.UTF8.GetString(decryptBytes); return decryptedString; 14 catch (CryptographicException err) throw new Exception(解密
16、出错:解密出错: + err.Message); finally cryptoStream.Close(); memoryStream.Close(); 15u 不对称加密也叫公钥加密,这种技术使用不不对称加密也叫公钥加密,这种技术使用不同的加密密钥与解密密钥,是一种同的加密密钥与解密密钥,是一种“由已知加密由已知加密密钥推导出解密密钥在计算上是不可行的密钥推导出解密密钥在计算上是不可行的”密码密码体制。产生的主要原因有两个,一是对称加密的体制。产生的主要原因有两个,一是对称加密的密钥分配问题,另一个是由于对数字签名的需求。密钥分配问题,另一个是由于对数字签名的需求。 u 不对称加密使用一个需
17、要保密的私钥和一个不对称加密使用一个需要保密的私钥和一个可以对任何人公开的公钥,即使用公钥可以对任何人公开的公钥,即使用公钥/私钥对私钥对来加密和解密数据。公钥和私钥都在数学上相关来加密和解密数据。公钥和私钥都在数学上相关联,用公钥加密的数据只能用私钥解密,反之,联,用公钥加密的数据只能用私钥解密,反之,用私钥加密的数据只能用公钥解密。两个密钥对用私钥加密的数据只能用公钥解密。两个密钥对于通信会话都是惟一的。于通信会话都是惟一的。 6.2 不对称加密(续)不对称加密(续)16u 为什么不对称加密更不容易被攻击呢?为什么不对称加密更不容易被攻击呢?关键在于对私钥的管理上。在对称加密中,关键在于对
18、私钥的管理上。在对称加密中,发送方必须先将解密密钥传递给接收方,接发送方必须先将解密密钥传递给接收方,接收方才能解密。如果能避免通过不安全的网收方才能解密。如果能避免通过不安全的网络传递私钥,就可以解决这个问题。络传递私钥,就可以解决这个问题。6.2 不对称加密(续)不对称加密(续)17 使用不对称加密算法加密数据后,私钥使用不对称加密算法加密数据后,私钥不是发送方传递给接收方的,而是接收方先不是发送方传递给接收方的,而是接收方先生成一个公钥生成一个公钥/私钥对,在接收被加密的数私钥对,在接收被加密的数据前,先将该公钥传递给发送方;注意,从据前,先将该公钥传递给发送方;注意,从公钥推导出私钥是
19、不可能的,所以不怕通过公钥推导出私钥是不可能的,所以不怕通过网络传递时被攻击者截获公钥。发送方得到网络传递时被攻击者截获公钥。发送方得到此公钥后,使用此公钥加密数据,再将加密此公钥后,使用此公钥加密数据,再将加密后的数据通过网络传递给接收方;接收方收后的数据通过网络传递给接收方;接收方收到加密后的数据后,再用私钥进行解密。由到加密后的数据后,再用私钥进行解密。由于没有传递私钥,从而保证了数据安全性。于没有传递私钥,从而保证了数据安全性。 18u .NET Framework提供以下实现不对称加密算提供以下实现不对称加密算法的类:法的类:DSACryptoServiceProvider RSAC
20、ryptoServiceProvider 6.2 不对称加密(续)不对称加密(续)19u RSACryptoServiceProvider类使用加密服务类使用加密服务提供程序提供的提供程序提供的RSA算法实现不对称加密和解密。算法实现不对称加密和解密。加密服务提供程序加密服务提供程序CSP(Cryptographic Service Provider)是微软在)是微软在Windows操作系统中内置的加操作系统中内置的加密处理模块,密处理模块,RSACryptoServiceProvider类已经对类已经对其提供的相关接口和参数进行了封装,所以即使其提供的相关接口和参数进行了封装,所以即使我们不
21、知道我们不知道CSP内部是如何实现的,也一样可以使内部是如何实现的,也一样可以使用其提供的功能。用其提供的功能。RSACryptoServiceProvider类的使用方法类的使用方法 20 例例.利用不对称加密算法加密指定的字符串,利用不对称加密算法加密指定的字符串,并输出加密和解密后的结果并输出加密和解密后的结果 21namespace RsaEncryptExample public partial class FormRsaEncrypt : Form public FormRsaEncrypt() InitializeComponent(); this.Text = RSA加密解密加
22、密解密; textBoxEncrypt.ReadOnly = true; textBoxDecrypt.ReadOnly = true; 22 private void buttonOK_Click(object sender, EventArgs e) /使用默认密钥创建使用默认密钥创建RSACryptoServiceProvider对象对象 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); /显示包含公钥显示包含公钥/私钥对的私钥对的XML表示形式,如果只显示公钥,表示形式,如果只显示公钥,将参数改为将参数改为fa
23、lse即可即可 richTextBoxKeys.Text = rsa.ToXmlString(true); /将被加密的字符串转换为字节数组将被加密的字符串转换为字节数组 byte dataToEncrypt = Encoding.UTF8.GetBytes(textBoxInput.Text); try /得到加密后的字节数组得到加密后的字节数组 byte encryptedData = rsa.Encrypt(dataToEncrypt, false); textBoxEncrypt.Text = Encoding.UTF8.GetString(encryptedData); /得到解密后
24、的字节数组得到解密后的字节数组 byte decryptedData = rsa.Decrypt(encryptedData, false); textBoxDecrypt.Text = Encoding.UTF8.GetString(decryptedData); 23 catch (Exception err) MessageBox.Show(err.Message); 24u 虽然不对称加密解决了用对称加密传递消息虽然不对称加密解决了用对称加密传递消息必须传递密钥的问题,但是由于不对称加密无法必须传递密钥的问题,但是由于不对称加密无法使用流进行处理,因此与对称加密相比效率较低,使用流进行
25、处理,因此与对称加密相比效率较低,不适用于加密大量数据的场合。在实际应用中,不适用于加密大量数据的场合。在实际应用中,一般将两种加密方法配合使用。其基本思想是:一般将两种加密方法配合使用。其基本思想是:用不对称加密算法加密对称加密的密钥,用对称用不对称加密算法加密对称加密的密钥,用对称加密算法加密实际数据。加密算法加密实际数据。 6.3 通过网络传递加密数据通过网络传递加密数据25u 具体设计思路可以简单描述为:具体设计思路可以简单描述为:A和和B相互传相互传递加密的数据前,递加密的数据前,B首先生成一个不对称加密算法首先生成一个不对称加密算法使用的公钥使用的公钥/私钥对,假定公钥为私钥对,假
26、定公钥为publicKey,私钥,私钥为为privateKey,然后,然后B将公钥将公钥publicKey通过网络传通过网络传递给递给A;A接收到此公钥后,根据此公钥初始化不接收到此公钥后,根据此公钥初始化不对称加密对象,并用此对象加密使用对称加密算对称加密对象,并用此对象加密使用对称加密算法的密钥法的密钥key,并将加密后的密钥,并将加密后的密钥key通过网络传递通过网络传递给给B;这样,;这样,A和和B都有了一个共同使用的对称加都有了一个共同使用的对称加密的密钥,然后双方用此密钥加密数据,并将加密的密钥,然后双方用此密钥加密数据,并将加密后的数据传递给对方,对方收到加密后的数据密后的数据传
27、递给对方,对方收到加密后的数据后,再用密钥后,再用密钥key解密数据。解密数据。 6.3 通过网络传递加密数据(续)通过网络传递加密数据(续)26u 通过这种方式,在不安全的网络上传递加密通过这种方式,在不安全的网络上传递加密后的数据时,虽然攻击者可以截获公钥,但是由后的数据时,虽然攻击者可以截获公钥,但是由于用公钥加密的数据只能用私钥解密,而私钥并于用公钥加密的数据只能用私钥解密,而私钥并没有通过网络传递,因此攻击者无法通过公钥没有通过网络传递,因此攻击者无法通过公钥publicKey破译加密后的密钥破译加密后的密钥key,因此也无法破译,因此也无法破译加密的消息。加密的消息。u 6.3 通
28、过网络传递加密数据(续)通过网络传递加密数据(续)27 在实际应用中,一般使用在实际应用中,一般使用TCP协议通过网络传协议通过网络传输数据。对于比较重要的数据,必须进行加密解输数据。对于比较重要的数据,必须进行加密解密处理。一般实现方案为:密处理。一般实现方案为:1) 传输双方均各自生成一个公钥传输双方均各自生成一个公钥/私钥对。私钥对。 2) 通过通过TCP协议交换公钥。协议交换公钥。3) 双方各自生成一个对称加密用的私钥,并双方各自生成一个对称加密用的私钥,并使用对方的公钥加密新创建的私钥。使用对方的公钥加密新创建的私钥。 4) 双方将加密后的对称加密用的私钥发送给双方将加密后的对称加密
29、用的私钥发送给对方,以便对方利用此私钥解密。对方,以便对方利用此私钥解密。 5) 双方使用对称加密进行会话。双方使用对称加密进行会话。6.3 通过网络传递加密数据(续)通过网络传递加密数据(续)28数据加密与解密的网络传输过程数据加密与解密的网络传输过程 字节序列字节序列网络流网络流发送加密的数据发送加密的数据计算发送数据量计算发送数据量内存流内存流加密加密读取加密的数据读取加密的数据网络流网络流读取数据量大小小读取数据量大小小解密解密内存流内存流字节序列字节序列发送方发送方 接收方接收方数据数据数据数据数据加密与解密的网络传输过程数据加密与解密的网络传输过程296.4 Hash算法与数字签名
30、算法与数字签名u 通过通过Internet下载文件后,怎样知道下载的下载文件后,怎样知道下载的文件是否和原始文件完全相同呢?或者说,发送文件是否和原始文件完全相同呢?或者说,发送方通过方通过Internet发送数据后,接收方如何验证接发送数据后,接收方如何验证接收的数据是否和原始数据完全相同呢?这就是数收的数据是否和原始数据完全相同呢?这就是数字签名的用途。字签名的用途。u 数字签名是利用不对称加密和数字签名是利用不对称加密和Hash算法共算法共同实现的。同实现的。 30u Hash算法也叫散列算法,其功能是把任意长度算法也叫散列算法,其功能是把任意长度的二进制值映射为较小的固定长度的二进制值,实的二进制值映射为较小的固定长度的二进制值,实现原理就是提供一种数据内容和数据存放地址之间现原理就是提供一种数据内容和数据存放地址之间的映射关系。利用的映射关系。利用Hash算法得到的这个固定长度的算法得到的这个固定长度的较小的二进制值叫较小的二进制值叫Hash值。值。6.4 Hash算法与数字签名(续)算法与数字签名(续)31uHash算法具有如下特点:算法具有如下特点: 1) 散列效果好。即使原始数据只发生一个小小散列效果好。即使原始数据只发生一个小小的改动,数据的散列
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 17440-2025粮食加工、储运系统粉尘防爆安全规范
- JJF 1282-2025时间继电器校准规范
- 动漫制作合同范本
- 农村地抵押合同范例
- 买卖鞋合同范例
- 公路发包合同范本
- 买断企业产品合同范本
- 代办检测合同范本
- 企业bt项目合同范本
- 三方工程合同范本
- 钢筋工程隐蔽检查验收记录表
- 区块链技术应用开发项目可行性分析报告
- 2022版10kV架空配电线路无人机自主巡检作业导则
- 加强师德师风建设学校师德师风警示教育讲座培训课件
- 猪饲料购销合同书
- 约克中央空调冷水机组年度维保方案
- 新闻采访与写作课件第十九章融合报道
- 常用小学生词语成语积累归类大全
- 七种不同样式的标书密封条
- 全国水利工程监理工程师培训教材质量控制
- 中国传统成语故事(英文版)
评论
0/150
提交评论