//DES3加密解密///publicclassDes3
{#regionCBC模式**//DES3 CBC模式加密//密钥///IV///明文的byte数组///密文的byte数组publicstaticbyte[] Des3EncodeCBC(byte[] key,byte[] iv,byte[] data )
{//复制于MSDNtry{//Create a MemoryStream.MemoryStream mStream=newMemoryStream();
TripleDESCryptoServiceProvider tdsp=newTripleDESCryptoServiceProvider();
tdsp.Mode=CipherMode.CBC;//默认值tdsp.Padding=PaddingMode.PKCS7;//默认值//Create a CryptoStream using the MemoryStream//and the passed key and initialization vector (IV).CryptoStream cStream=newCryptoStream( mStream,
tdsp.CreateEncryptor( key, iv ),
CryptoStreamMode.Write );//Write the byte array to the crypto stream and flush it.cStream.Write( data,0, data.Length );
cStream.FlushFinalBlock();//Get an array of bytes from the//MemoryStream that holds the//encrypted data.byte[] ret=mStream.ToArray();//Close the streams.cStream.Close();
mStream.Close();//Return the encrypted buffer.returnret;
}catch( CryptographicException e )
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message );returnnull;
}
}//DES3 CBC模式解密//密钥///IV///密文的byte数组///明文的byte数组publicstaticbyte[] Des3DecodeCBC(byte[] key,byte[] iv,byte[] data )
{try{//Create a new MemoryStream using the passed//array of encrypted data.MemoryStream msDecrypt=newMemoryStream( data );
TripleDESCryptoServiceProvider tdsp=newTripleDESCryptoServiceProvider();
tdsp.Mode=CipherMode.CBC;
tdsp.Padding=PaddingMode.PKCS7;//Create a CryptoStream using the MemoryStream//and the passed key and initialization vector (IV).CryptoStream csDecrypt=newCryptoStream( msDecrypt,
tdsp.CreateDecryptor( key, iv ),
CryptoStreamMode.Read );//Create buffer to hold the decrypted data.byte[] fromEncrypt=newbyte[data.Length];//Read the decrypted data out of the crypto stream//and place it into the temporary buffer.csDecrypt.Read( fromEncrypt,0, fromEncrypt.Length );//Convert the buffer into a string and return it.returnfromEncrypt;
}catch( CryptographicException e )
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message );returnnull;
}
}#endregion#regionECB模式//DES3 ECB模式加密//密钥///IV(当模式为ECB时,IV无用)///明文的byte数组///密文的byte数组publicstaticbyte[] Des3EncodeECB(byte[] key,byte[] iv,byte[] data )
{try{//Create a MemoryStream.MemoryStream mStream=newMemoryStream();
TripleDESCryptoServiceProvider tdsp=newTripleDESCryptoServiceProvider();
tdsp.Mode=CipherMode.ECB;
tdsp.Padding=PaddingMode.PKCS7;//Create a CryptoStream using the MemoryStream//and the passed key and initialization vector (IV).CryptoStream cStream=newCryptoStream( mStream,
tdsp.CreateEncryptor( key, iv ),
CryptoStreamMode.Write );//Write the byte array to the crypto stream and flush it.cStream.Write( data,0, data.Length );
cStream.FlushFinalBlock();//Get an array of bytes from the//MemoryStream that holds the//encrypted data.byte[] ret=mStream.ToArray();//Close the streams.cStream.Close();
mStream.Close();//Return the encrypted buffer.returnret;
}catch( CryptographicException e )
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message );returnnull;
}
}//DES3 ECB模式解密//密钥///IV(当模式为ECB时,IV无用)///密文的byte数组///明文的byte数组publicstaticbyte[] Des3DecodeECB(byte[] key,byte[] iv,byte[] data )
{try{//Create a new MemoryStream using the passed//array of encrypted data.MemoryStream msDecrypt=newMemoryStream( data );
TripleDESCryptoServiceProvider tdsp=newTripleDESCryptoServiceProvider();
tdsp.Mode=CipherMode.ECB;
tdsp.Padding=PaddingMode.PKCS7;//Create a CryptoStream using the MemoryStream//and the passed key and initialization vector (IV).CryptoStream csDecrypt=newCryptoStream( msDecrypt,
tdsp.CreateDecryptor( key, iv ),
CryptoStreamMode.Read );//Create buffer to hold the decrypted data.byte[] fromEncrypt=newbyte[data.Length];//Read the decrypted data out of the crypto stream//and place it into the temporary buffer.csDecrypt.Read( fromEncrypt,0, fromEncrypt.Length );//Convert the buffer into a string and return it.returnfromEncrypt;
}catch( CryptographicException e )
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message );returnnull;
}
}#endregion//类测试///publicstaticvoidTest()
{
System.Text.Encoding utf8=System.Text.Encoding.UTF8;//key为abcdefghijklmnopqrstuvwx的Base64编码byte[] key=Convert.FromBase64String("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4");byte[] iv=newbyte[] {1,2,3,4,5,6,7,8};//当模式为ECB时,IV无用byte[] data=utf8.GetBytes("中国ABCabc123");
System.Console.WriteLine("ECB模式:");byte[] str1=Des3.Des3EncodeECB( key, iv, data );byte[] str2=Des3.Des3DecodeECB( key, iv, str1 );
System.Console.WriteLine( Convert.ToBase64String( str1 ) );
System.Console.WriteLine( System.Text.Encoding.UTF8.GetString( str2 ) );
System.Console.WriteLine();
System.Console.WriteLine("CBC模式:");byte[] str3=Des3.Des3EncodeCBC( key, iv, data );byte[] str4=Des3.Des3DecodeCBC( key, iv, str3 );
System.Console.WriteLine( Convert.ToBase64String( str3 ) );
System.Console.WriteLine( utf8.GetString( str4 ) );
System.Console.WriteLine();
}
}