C#网络编程---第6章_网络数据加密与解密

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第6章网络数据加密与解密6.1对称加密6.2不对称加密6.3通过网络传递加密数据6.4Hash算法与数字签名26.1对称加密对称加密也称为私钥加密,采用私钥算法,加密和解密数据使用同一个密钥。私钥算法以块为单位加密数据,一次加密一个数据块。.NET类库使用的私钥算法有RC2、DES、TripleDES和Rijndael。这些算法通过加密将n字节的输入块转换为加密字节的输出块。如果要加密或解密字节序列,必须逐块进行。3为了保证数据的安全,.NET基类库中提供的私钥算法类使用称作密码块链(CBC,CipherBlockChaining)的链模式,算法使用一个密钥和一个初始化向量(IV,InitializationVector)对数据执行加密转换。密钥和初始化向量IV一起决定如何加密数据,以及如何将数据解密为原始数据。通信双方都必须知道这个密钥和初始化向量才能够加密和解密数据。6.1对称加密(续)4对称加密算法的优点是保密强度高,加、解密速度快,适合加密大量数据。攻击者如果对加密后的数据进行破译,惟一的办法就是对每个可能的密钥执行穷举搜索。而采用这种加密技术,即使使用最快的计算机执行这种搜索,耗费的时间也相当长。如果使用较大的密钥,破译将会更加困难。6.1对称加密(续)5在.NETFramework中,公共语言运行时CLR使用面向流的设计实现对称加密,该设计的核心是CryptoStream,实现CryptoStream的任何被加密的对象都可以和实现Stream的任何对象链接起来。实现对称加密算法的类有四种:DESCryptoServiceProviderRC2CryptoServiceProviderRijndaelManagedTripleDESCryptoServiceProvider6.1对称加密(续)6四种对称加密类的主要特点类可用密钥长度(bit)加密算法DESCryptoServiceProvider64DES加密算法RC2CryptoServiceProvider40-128(每8位递增)RC2加密算法RijndaelManaged128-256(每64位递增)Rijndael加密算法TripleDESCryptoServiceProvider128-192(每64位递增)三重DES加密算法7TripleDES加密算法介绍TripleDES使用DES算法的三次连续迭代,支持从128位到192位(以64位递增)的密钥长度,其安全性比DES更高。DES的含义是DataEncryptionStandard,是美国1977年公布的一种数据加密标准,DES算法在各超市零售业、银行自动取款机、磁卡及IC卡、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡的认证、金融交易数据包的MAC校验等,均用到DES算法。DES算法具有非常高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。8例.使用TripleDES加密算法对输入的字符串进行加密,并输出加密后的字符串和解密后的结果。9namespaceTdesEncryptExample{publicpartialclassFormTdesEncrypt:Form{publicFormTdesEncrypt(){InitializeComponent();}privatevoidFormTdesEncrypt_Load(objectsender,EventArgse){textBoxEncrypt.ReadOnly=true;textBoxDecrypt.ReadOnly=true;}privatevoidbuttonOK_Click(objectsender,EventArgse){stringstr=textBoxInput.Text;if(str.Length==0){MessageBox.Show(请输入被加密的字符串);return;}10//加密try{TripleDESCryptoServiceProvidertdes=newTripleDESCryptoServiceProvider();//随机生成密钥Key和初始化向量IVtdes.GenerateKey();tdes.GenerateIV();textBoxKey.Text=Encoding.UTF8.GetString(tdes.Key);//得到加密后的字节流byte[]encryptedBytes=EncryptText(str,tdes.Key,tdes.IV);//显示加密后的字符串textBoxEncrypt.Text=Encoding.UTF8.GetString(encryptedBytes);//解密stringdecryptString=DecryptText(encryptedBytes,tdes.Key,tdes.IV);//显示解密后的字符串textBoxDecrypt.Text=decryptString;}11catch(Exceptionerr){MessageBox.Show(err.Message,出错);}}privatebyte[]EncryptText(stringstr,byte[]Key,byte[]IV){//创建一个内存流MemoryStreammemoryStream=newMemoryStream();//使用传递的私钥和IV创建加密流CryptoStreamcryptoStream=newCryptoStream(memoryStream,newTripleDESCryptoServiceProvider().CreateEncryptor(Key,IV),CryptoStreamMode.Write);//将传递的字符串转换为字节数组byte[]toEncrypt=Encoding.UTF8.GetBytes(str);12try{//将字节数组写入加密流,并清除缓冲区cryptoStream.Write(toEncrypt,0,toEncrypt.Length);cryptoStream.FlushFinalBlock();//得到加密后的字节数组byte[]encryptedBytes=memoryStream.ToArray();returnencryptedBytes;}catch(CryptographicExceptionerr){thrownewException(加密出错:+err.Message);}finally{cryptoStream.Close();memoryStream.Close();}}13privatestringDecryptText(byte[]dataBytes,byte[]Key,byte[]IV){//根据加密后的字节数组创建一个内存流MemoryStreammemoryStream=newMemoryStream(dataBytes);//使用传递的私钥、IV和内存流创建解密流CryptoStreamcryptoStream=newCryptoStream(memoryStream,newTripleDESCryptoServiceProvider().CreateDecryptor(Key,IV),CryptoStreamMode.Read);//创建一个字节数组保存解密后的数据byte[]decryptBytes=newbyte[dataBytes.Length];try{//从解密流中将解密后的数据读到字节数组中cryptoStream.Read(decryptBytes,0,decryptBytes.Length);//得到解密后的字符串stringdecryptedString=Encoding.UTF8.GetString(decryptBytes);returndecryptedString;}14catch(CryptographicExceptionerr){thrownewException(解密出错:+err.Message);}finally{cryptoStream.Close();memoryStream.Close();}}}}15不对称加密也叫公钥加密,这种技术使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。产生的主要原因有两个,一是对称加密的密钥分配问题,另一个是由于对数字签名的需求。不对称加密使用一个需要保密的私钥和一个可以对任何人公开的公钥,即使用公钥/私钥对来加密和解密数据。公钥和私钥都在数学上相关联,用公钥加密的数据只能用私钥解密,反之,用私钥加密的数据只能用公钥解密。两个密钥对于通信会话都是惟一的。6.2不对称加密(续)16为什么不对称加密更不容易被攻击呢?关键在于对私钥的管理上。在对称加密中,发送方必须先将解密密钥传递给接收方,接收方才能解密。如果能避免通过不安全的网络传递私钥,就可以解决这个问题。6.2不对称加密(续)17•使用不对称加密算法加密数据后,私钥不是发送方传递给接收方的,而是接收方先生成一个公钥/私钥对,在接收被加密的数据前,先将该公钥传递给发送方;注意,从公钥推导出私钥是不可能的,所以不怕通过网络传递时被攻击者截获公钥。发送方得到此公钥后,使用此公钥加密数据,再将加密后的数据通过网络传递给接收方;接收方收到加密后的数据后,再用私钥进行解密。由于没有传递私钥,从而保证了数据安全性。18.NETFramework提供以下实现不对称加密算法的类:DSACryptoServiceProviderRSACryptoServiceProvider6.2不对称加密(续)19RSACryptoServiceProvider类使用加密服务提供程序提供的RSA算法实现不对称加密和解密。加密服务提供程序CSP(CryptographicServiceProvider)是微软在Windows操作系统中内置的加密处理模块,RSACryptoServiceProvider类已经对其提供的相关接口和参数进行了封装,所以即使我们不知道CSP内部是如何实现的,也一样可以使用其提供的功能。RSACryptoServiceProvider类的使用方法20例.利用不对称加密算法加密指定的字符串,并输出加密和解密后的结果21namespaceRsaEncryptExample{publicpartialclassFormRsaEncrypt:Form{publicFormRsaEncrypt(){InitializeComponent();this.Text=RSA加密解密;textBoxEncrypt.ReadOnly=true;textBoxDecrypt.ReadOnly=true;}22privatevoidbuttonOK_Click(objectsender,EventArgse){//使用默认密钥创建RSACryptoServiceProvider对象RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();//显示包含公钥/私钥对的XML表示形式,如果只显示公钥,将参数改为false即可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);//得到解密后的字节数组byte[]decryptedData=r

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功