第6章 网络数据加密与解密
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10
例.使用TripleDES加密算法对输入的字符串 进行加密,并输出加密后的字符串和解密后 的结果。
(1) 新建一个名为TdesEncryptExample的 Windows应用程序,修改Form1.cs为 FormTdesEncrypt.cs,设计界面如下图所示。
textBoxKey textBoxInput buttonOK textBoxDecrypt textBoxEncrypt
4
6.1 对称加密(续)
对称加密算法的优点是保密强度高,加、解 密速度快,适合加密大量数据。攻击者如果对加 密后的数据进行破译,惟一的办法就是对每个可 能的密钥执行穷举搜索。而采用这种加密技术, 即使使用最快的计算机执行这种搜索,耗费的时 间也相当长。如果使用较大的密钥,破译将会更 加困难。
5
7
TripleDES加密算法介绍
TripleDES使用DES算法的三次连续迭代, 支持从128位到192位(以64位递增)的密钥长度, 其安全性比DES更高。DES的含义是Data Encryption Standard,是美国1977年公布的一种 数据加密标准,DES算法在各超市零售业、银行 自动取款机、磁卡及IC卡、加油站、高速公路收 费站等领域被广泛应用,以此来实现关键数据的 保密,如信用卡持卡人的PIN的加密传输,IC卡 的认证、金融交易数据包的MAC校验等,均用 到DES算法。DES算法具有非常高的安全性,到 目前为止,除了用穷举搜索法对DES算法进行攻 击外,还没有发现更有效的办法。
第6章
6.1 6.2 6.3 6.4
网络数据加密与解密
对称加密 不对称加密 通过网络传递加密数据 Hash算法与数字签名
1
数据在网络传输过程中的保密性是网络安全 中重点要考虑的问题之一。由于通过网络传递数 据是在不安全的信道上进行传输,因此通信双方 要想确保任何可能正在侦听的人无法理解通信的 内容,而且希望确保接收方接收的信息没有在传 输期间被任何人修改,最好的办法就是在传输数 据前对数据进行加密,接收方接收到加密的数据 后再进行解密处理,从而保证数据的安全性。 在.NET库的System.Security.Cryptography 命名空间中,包含多种加密数据的类,涉及多种 加密算法。加密方法主要分为两大类:对称加密 和不对称加密。
11
(2) 添加对应的命名空间引用、方法和事件, 源程序如下: //添加的命名空间引用 using System.Security.Cryptography; using System.IO;
12
namespace 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 sender, EventArgs e) { string str = textBoxInput.Text; if (str.Length == 0) { MessageBox.Show("请输入被加密的字符串"); return; }
2
6.1 对称加密
对称加密也称为私钥加密,采用私钥算法, 加密和解密数据使用同一个密钥。 私钥算法以块为单位加密数据,一次加密 一个数据块。 .NET类库使用的私钥算法有RC2、DES、 TripleDES和Rijndael。这些算法通过加密将n字 节的输入块转换为加密字节的输出块。如果要 加密或解密字节序列,必须逐块进行。
17
catch (CryptographicException err) { throw new Exception("解密出错:" + err.Message); } finally { cryptoStream.Close(); memoryStream.Close(); } } } }
6.1 对称加密(续)
在.NET Framework中,公共语言运行时 CLR(Common Language Runtime)使用面向 流的设计实现对称加密,该设计的核心是 CryptoStream,实现CryptoStream的任何被加 密的对象都可以和实现Stream的任何对象链接起 来。实现对称加密算法的类有四种: DESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider
16
private string DecryptText(byte[] dataBytes, byte[] Key, byte[] IV) { //根据加密后的字节数组创建一个内存流 MemoryStream memoryStream = new MemoryStream(dataBytes); //使用传递的私钥、IV和内存流创建解密流 CryptoStream cryptoStream = new CryptoStream(memoryStream, new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV), CryptoStreamMode.Read); //创建一个字节数组保存解密后的数据 byte[] decryptBytes = new byte[dataBytes.Length]; try { //从解密流中将解密后的数据读到字节数组中 cryptoStream.Read(decryptBytes, 0, decryptBytes.Length); //得到解密后的字符串 string decryptedString = Encoding.UTF8.GetString(decryptBytes); return decryptedString; }
14
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 TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV), CryptoStreamMode.Write); //将传递的字符串转换为字节数组 byte[] toEncrypt = Encoding.UTF8.GetBytes(str);
15
try { //将字节数组写入加密流,并清除缓冲区 cryptoStream.Write(toEncrypt, 0, toEncrypt.Length); cryptoStream.FlushFinalBlock(); //得到加密后的字节数组 byte[] encryptedBytes = memoryStream.ToArray(); return encryptedBytes; } catch (CryptographicException err) { throw new Exception("加密出错:" + err.Message); } finally { cryptoStream.Close(); memoryStream.Close(); } }
6
四种对称加密类的主要特点
类 DESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider 可用密钥长度 (bit) 64 40-128 (每8位递增) 128-256 (每64位递增) 128-192 (每64位递增) 加密算法 DES加密算法 RC2加密算法 Rijndael加密算法 三重DES加密算 法
13
பைடு நூலகம்
//加密
try { TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); //随机生成密钥Key和初始化向量IV tdes.GenerateKey(); tdes.GenerateIV(); textBoxKey.Text = Encoding.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); //显示解密后的字符串 textBoxDecrypt.Text = decryptString; }
为了使用流进行加密解密处理,.NET Framework还 提供了CryptoStream类,该类用于定义将数据流链接到 加密转换的流。实现CryptoStream的任何加密对象均可 以和实现Stream的任何对象链接起来,因此一个对象的 流式处理输出可以馈送到另一个对象的输入,而不需要 分别存储中间结果,即不需要存储第一个对象的输出。 CryptoStream对象的用法和其它流的用法相似,这 里不再重复介绍。但是要注意,完成CryptoStream对象 的使用后,不要忘了调用Close方法关闭该对象。Close方 法会刷新流并使所有剩余的数据块都被CryptoStream对 象处理。由于在调用Close方法前对流的读写操作有可能 会出现异常,所以为确保流处理能够正常关闭,一般在 try/catch语句的finally块中调用Close方法。
8
TripleDESCryptoServiceProvider类常用的 属性和方法
名称 BlockSize属性 Key属性 IV属性 KeySize属性 解释 获取或设置加密操作的快大小,以位为单位 获取或设置TripleDES算法的机密密钥 获取或设置TripleDES算法的初始化向量 获取或设置TripleDES算法所用密钥的大小,以位 为单位
3
6.1 对称加密(续)
为了保证数据的安全,.NET基类库中提供 的私钥算法类使用称作密码块链(CBC,Cipher Block Chaining)的链模式,算法使用一个密钥 和一个初始化向量(IV,Initialization Vector) 对数据执行加密转换。密钥和初始化向量IV一起 决定如何加密数据,以及如何将数据解密为原始 数据。通信双方都必须知道这个密钥和初始化向 量才能够加密和解密数据。
CreateEncryptor方法 创建TripleDES加密器对象
CreateDecryptor方法 创建TripleDES解密器对象 GenerateIV方法 GenerateKey方法 生成用于TripleDES算法的随机初始化向量IV 生成用于TripleDES算法的随机密钥
9
TripleDES加密算法介绍(续)
例.使用TripleDES加密算法对输入的字符串 进行加密,并输出加密后的字符串和解密后 的结果。
(1) 新建一个名为TdesEncryptExample的 Windows应用程序,修改Form1.cs为 FormTdesEncrypt.cs,设计界面如下图所示。
textBoxKey textBoxInput buttonOK textBoxDecrypt textBoxEncrypt
4
6.1 对称加密(续)
对称加密算法的优点是保密强度高,加、解 密速度快,适合加密大量数据。攻击者如果对加 密后的数据进行破译,惟一的办法就是对每个可 能的密钥执行穷举搜索。而采用这种加密技术, 即使使用最快的计算机执行这种搜索,耗费的时 间也相当长。如果使用较大的密钥,破译将会更 加困难。
5
7
TripleDES加密算法介绍
TripleDES使用DES算法的三次连续迭代, 支持从128位到192位(以64位递增)的密钥长度, 其安全性比DES更高。DES的含义是Data Encryption Standard,是美国1977年公布的一种 数据加密标准,DES算法在各超市零售业、银行 自动取款机、磁卡及IC卡、加油站、高速公路收 费站等领域被广泛应用,以此来实现关键数据的 保密,如信用卡持卡人的PIN的加密传输,IC卡 的认证、金融交易数据包的MAC校验等,均用 到DES算法。DES算法具有非常高的安全性,到 目前为止,除了用穷举搜索法对DES算法进行攻 击外,还没有发现更有效的办法。
第6章
6.1 6.2 6.3 6.4
网络数据加密与解密
对称加密 不对称加密 通过网络传递加密数据 Hash算法与数字签名
1
数据在网络传输过程中的保密性是网络安全 中重点要考虑的问题之一。由于通过网络传递数 据是在不安全的信道上进行传输,因此通信双方 要想确保任何可能正在侦听的人无法理解通信的 内容,而且希望确保接收方接收的信息没有在传 输期间被任何人修改,最好的办法就是在传输数 据前对数据进行加密,接收方接收到加密的数据 后再进行解密处理,从而保证数据的安全性。 在.NET库的System.Security.Cryptography 命名空间中,包含多种加密数据的类,涉及多种 加密算法。加密方法主要分为两大类:对称加密 和不对称加密。
11
(2) 添加对应的命名空间引用、方法和事件, 源程序如下: //添加的命名空间引用 using System.Security.Cryptography; using System.IO;
12
namespace 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 sender, EventArgs e) { string str = textBoxInput.Text; if (str.Length == 0) { MessageBox.Show("请输入被加密的字符串"); return; }
2
6.1 对称加密
对称加密也称为私钥加密,采用私钥算法, 加密和解密数据使用同一个密钥。 私钥算法以块为单位加密数据,一次加密 一个数据块。 .NET类库使用的私钥算法有RC2、DES、 TripleDES和Rijndael。这些算法通过加密将n字 节的输入块转换为加密字节的输出块。如果要 加密或解密字节序列,必须逐块进行。
17
catch (CryptographicException err) { throw new Exception("解密出错:" + err.Message); } finally { cryptoStream.Close(); memoryStream.Close(); } } } }
6.1 对称加密(续)
在.NET Framework中,公共语言运行时 CLR(Common Language Runtime)使用面向 流的设计实现对称加密,该设计的核心是 CryptoStream,实现CryptoStream的任何被加 密的对象都可以和实现Stream的任何对象链接起 来。实现对称加密算法的类有四种: DESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider
16
private string DecryptText(byte[] dataBytes, byte[] Key, byte[] IV) { //根据加密后的字节数组创建一个内存流 MemoryStream memoryStream = new MemoryStream(dataBytes); //使用传递的私钥、IV和内存流创建解密流 CryptoStream cryptoStream = new CryptoStream(memoryStream, new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV), CryptoStreamMode.Read); //创建一个字节数组保存解密后的数据 byte[] decryptBytes = new byte[dataBytes.Length]; try { //从解密流中将解密后的数据读到字节数组中 cryptoStream.Read(decryptBytes, 0, decryptBytes.Length); //得到解密后的字符串 string decryptedString = Encoding.UTF8.GetString(decryptBytes); return decryptedString; }
14
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 TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV), CryptoStreamMode.Write); //将传递的字符串转换为字节数组 byte[] toEncrypt = Encoding.UTF8.GetBytes(str);
15
try { //将字节数组写入加密流,并清除缓冲区 cryptoStream.Write(toEncrypt, 0, toEncrypt.Length); cryptoStream.FlushFinalBlock(); //得到加密后的字节数组 byte[] encryptedBytes = memoryStream.ToArray(); return encryptedBytes; } catch (CryptographicException err) { throw new Exception("加密出错:" + err.Message); } finally { cryptoStream.Close(); memoryStream.Close(); } }
6
四种对称加密类的主要特点
类 DESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider 可用密钥长度 (bit) 64 40-128 (每8位递增) 128-256 (每64位递增) 128-192 (每64位递增) 加密算法 DES加密算法 RC2加密算法 Rijndael加密算法 三重DES加密算 法
13
பைடு நூலகம்
//加密
try { TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); //随机生成密钥Key和初始化向量IV tdes.GenerateKey(); tdes.GenerateIV(); textBoxKey.Text = Encoding.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); //显示解密后的字符串 textBoxDecrypt.Text = decryptString; }
为了使用流进行加密解密处理,.NET Framework还 提供了CryptoStream类,该类用于定义将数据流链接到 加密转换的流。实现CryptoStream的任何加密对象均可 以和实现Stream的任何对象链接起来,因此一个对象的 流式处理输出可以馈送到另一个对象的输入,而不需要 分别存储中间结果,即不需要存储第一个对象的输出。 CryptoStream对象的用法和其它流的用法相似,这 里不再重复介绍。但是要注意,完成CryptoStream对象 的使用后,不要忘了调用Close方法关闭该对象。Close方 法会刷新流并使所有剩余的数据块都被CryptoStream对 象处理。由于在调用Close方法前对流的读写操作有可能 会出现异常,所以为确保流处理能够正常关闭,一般在 try/catch语句的finally块中调用Close方法。
8
TripleDESCryptoServiceProvider类常用的 属性和方法
名称 BlockSize属性 Key属性 IV属性 KeySize属性 解释 获取或设置加密操作的快大小,以位为单位 获取或设置TripleDES算法的机密密钥 获取或设置TripleDES算法的初始化向量 获取或设置TripleDES算法所用密钥的大小,以位 为单位
3
6.1 对称加密(续)
为了保证数据的安全,.NET基类库中提供 的私钥算法类使用称作密码块链(CBC,Cipher Block Chaining)的链模式,算法使用一个密钥 和一个初始化向量(IV,Initialization Vector) 对数据执行加密转换。密钥和初始化向量IV一起 决定如何加密数据,以及如何将数据解密为原始 数据。通信双方都必须知道这个密钥和初始化向 量才能够加密和解密数据。
CreateEncryptor方法 创建TripleDES加密器对象
CreateDecryptor方法 创建TripleDES解密器对象 GenerateIV方法 GenerateKey方法 生成用于TripleDES算法的随机初始化向量IV 生成用于TripleDES算法的随机密钥
9
TripleDES加密算法介绍(续)