C# 3DES加密解密
2015-04-14 11:50
295 查看
/// /// DES3加密解密 /// public class Des3 { #region CBC模式** /// /// DES3 CBC模式加密 /// /// 密钥 /// IV /// 明文的byte数组 /// 密文的byte数组 public static byte[] Des3EncodeCBC( byte[] key, byte[] iv, byte[] data ) { //复制于MSDN try { // Create a MemoryStream. MemoryStream mStream = new MemoryStream(); TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider(); tdsp.Mode = CipherMode.CBC; //默认值 tdsp.Padding = PaddingMode.PKCS7; //默认值 // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). CryptoStream cStream = new CryptoStream( 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. return ret; } catch ( CryptographicException e ) { Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message ); return null; } } /// /// DES3 CBC模式解密 /// /// 密钥 /// IV /// 密文的byte数组 /// 明文的byte数组 public static byte[] Des3DecodeCBC( byte[] key, byte[] iv, byte[] data ) { try { // Create a new MemoryStream using the passed // array of encrypted data. MemoryStream msDecrypt = new MemoryStream( data ); TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider(); tdsp.Mode = CipherMode.CBC; tdsp.Padding = PaddingMode.PKCS7; // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). CryptoStream csDecrypt = new CryptoStream( msDecrypt, tdsp.CreateDecryptor( key, iv ), CryptoStreamMode.Read ); // Create buffer to hold the decrypted data. byte[] fromEncrypt = new byte[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. return fromEncrypt; } catch ( CryptographicException e ) { Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message ); return null; } } #endregion #region ECB模式 /// /// DES3 ECB模式加密 /// /// 密钥 /// IV(当模式为ECB时,IV无用) /// 明文的byte数组 /// 密文的byte数组 public static byte[] Des3EncodeECB( byte[] key, byte[] iv, byte[] data ) { try { // Create a MemoryStream. MemoryStream mStream = new MemoryStream(); TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider(); tdsp.Mode = CipherMode.ECB; tdsp.Padding = PaddingMode.PKCS7; // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). CryptoStream cStream = new CryptoStream( mStr 4000 eam, 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. return ret; } catch ( CryptographicException e ) { Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message ); return null; } } /// /// DES3 ECB模式解密 /// /// 密钥 /// IV(当模式为ECB时,IV无用) /// 密文的byte数组 /// 明文的byte数组 public static byte[] Des3DecodeECB( byte[] key, byte[] iv, byte[] data ) { try { // Create a new MemoryStream using the passed // array of encrypted data. MemoryStream msDecrypt = new MemoryStream( data ); TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider(); tdsp.Mode = CipherMode.ECB; tdsp.Padding = PaddingMode.PKCS7; // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). CryptoStream csDecrypt = new CryptoStream( msDecrypt, tdsp.CreateDecryptor( key, iv ), CryptoStreamMode.Read ); // Create buffer to hold the decrypted data. byte[] fromEncrypt = new byte[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. return fromEncrypt; } catch ( CryptographicException e ) { Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message ); return null; } } #endregion /// /// 类测试 /// public static void Test() { System.Text.Encoding utf8 = System.Text.Encoding.UTF8; //key为abcdefghijklmnopqrstuvwx的Base64编码 //注意:key的值必须是16/24位 byte[] key = Convert.FromBase64String( "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4" ); byte[] iv = new byte[] { 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(); } }
相关文章推荐
- Android: JAVA和C# 3DES加密解密(转)
- JAVA和C# 3DES加密解密
- C# 加密解密(DES,3DES,MD5,Base64) 类
- C#的3DES加密/解密
- JAVA和C# 3DES加密解密
- JAVA和C# 3DES加密解密
- Java和C#中3DES的加密与解密
- C# 3DES加密 解密
- JAVA和C# 3DES加密解密
- 银联手机支付(.Net Csharp),3DES加密解密,RSA加密解密,RSA私钥加密公钥解密,.Net RSA 3DES C#
- JAVA和C# 3DES加密解密
- C#实现简单的3DES加密解密功能示例
- Android 3DES加密解密(JAVA和C#)
- 分享:JAVA和C# 3DES加密解密
- C#版3DES加密解密简单示例
- JAVA和C# 3DES加密解密
- JAVA和C# 3DES加密解密
- Android 3DES加密解密(JAVA和C#)
- JAVA和C# 3DES加密解密
- JAVA和C# 3DES加密解密