对称加密(4) .NET对称加密实践2014-04-24在使用.NET框架提供的加密算法实现类来执行加密任务时,需要准备加密密钥和初始化向量(Initialization Vector,IV)。基于对称加密的特点,在加密数据之后一定要保存好密钥和初始化向量,因为解密要用到它们。但是对于不同的数据加密,要使用不同的密钥和初始化向量,理论上每次新的加密过程都应该使用全新的密钥和初始化向量。通常需要将加密密钥和初始化向量传递给另一个人,这时候需要使用非对称加密算法来加密密钥和初始化向量,然后在网络上传输。本节主要演示如何使用加密实践类,更多的应用内容会在本书的第四部分介绍。那么如何创建加密密钥和初始化向量呢?有两种基本方法,一种是使用加密算法实现类的构造函数,另一种是使用GenerateIV()和GenerateKey()方法生成密钥和初始化向量。使用构造函数创建密钥和初始化向量先测试构造函数的方法,如代码清单6-5。代码清单6-5 使用构造函数创建密钥和初始化向量
using System;using System.Text;using System.Security.Cryptography;namespace Encription{classProgram{staticvoid Main(string[] args){AesCryptoServiceProvider acsp = new AesCryptoServiceProvider();WriteKeyAndIV(acsp);AesManaged am = newAesManaged();WriteKeyAndIV(am);DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();WriteKeyAndIV(dsp);TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider();WriteKeyAndIV(tdsp);RijndaelManaged rm = new RijndaelManaged();WriteKeyAndIV(rm);Console.Read();}staticvoid WriteKeyAndIV(SymmetricAlgorithm sa){Console.WriteLine(GetStringFromByte(sa.Key));Console.WriteLine("*******");Console.WriteLine(GetStringFromByte(sa.IV));Console.WriteLine("--------------------------");}staticstring GetStringFromByte(byte[] bytes){string s="";for (int i = 0; i < bytes.Length; i++){s += bytes[i].ToString()+" ";}return s;}}}