01.///
02.///DES3加密解密
03.///
04.public classDes305.{06. #region CBC模式**
07. ///
08. ///DES3 CBC模式加密
09. ///
10. /// 密钥
11. /// IV
12. /// 明文的byte数组
13. /// 密文的byte数组
14. public static byte[] Des3EncodeCBC( byte[] key, byte[] iv, byte[] data )15. {16. //复制于MSDN
17. try
18. {19. //Create a MemoryStream.
20. MemoryStream mStream = newMemoryStream();21. TripleDESCryptoServiceProvider tdsp = newTripleDESCryptoServiceProvider();22. tdsp.Mode = CipherMode.CBC; //默认值
23. tdsp.Padding = PaddingMode.PKCS7; //默认值
24. //Create a CryptoStream using the MemoryStream
25. //and the passed key and initialization vector (IV).
26. CryptoStream cStream = newCryptoStream( mStream,27. tdsp.CreateEncryptor( key, iv ),28. CryptoStreamMode.Write );29. //Write the byte array to the crypto stream and flush it.
30. cStream.Write( data, 0, data.Length );31. cStream.FlushFinalBlock();32. //Get an array of bytes from the
33. //MemoryStream that holds the
34. //encrypted data.
35. byte[] ret =mStream.ToArray();36. //Close the streams.
37. cStream.Close();38. mStream.Close();39. //Return the encrypted buffer.
40. returnret;41. }42. catch( CryptographicException e )43. {44. Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message );45. return null;46. }47. }48. ///
49. ///DES3 CBC模式解密
50. ///
51. /// 密钥
52. /// IV
53. /// 密文的byte数组
54. /// 明文的byte数组
55. public static byte[] Des3DecodeCBC( byte[] key, byte[] iv, byte[] data )56. {57. try
58. {59. //Create a new MemoryStream using the passed
60. //array of encrypted data.
61. MemoryStream msDecrypt = newMemoryStream( data );62. TripleDESCryptoServiceProvider tdsp = newTripleDESCryptoServiceProvider();63. tdsp.Mode =CipherMode.CBC;64. tdsp.Padding =PaddingMode.PKCS7;65. //Create a CryptoStream using the MemoryStream
66. //and the passed key and initialization vector (IV).
67. CryptoStream csDecrypt = newCryptoStream( msDecrypt,68. tdsp.CreateDecryptor( key, iv ),69. CryptoStreamMode.Read );70. //Create buffer to hold the decrypted data.
71. byte[] fromEncrypt = new byte[data.Length];72. //Read the decrypted data out of the crypto stream
73. //and place it into the temporary buffer.
74. csDecrypt.Read( fromEncrypt, 0, fromEncrypt.Length );75. //Convert the buffer into a string and return it.
76. returnfromEncrypt;77. }78. catch( CryptographicException e )79. {80. Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message );81. return null;82. }83. }84. #endregion
85. #region ECB模式
86. ///
87. ///DES3 ECB模式加密
88. ///
89. /// 密钥
90. /// IV(当模式为ECB时,IV无用)
91. /// 明文的byte数组
92. /// 密文的byte数组
93. public static byte[] Des3EncodeECB( byte[] key, byte[] iv, byte[] data )94. {95. try
96. {97. //Create a MemoryStream.
98. MemoryStream mStream = newMemoryStream();99. TripleDESCryptoServiceProvider tdsp = newTripleDESCryptoServiceProvider();100. tdsp.Mode =CipherMode.ECB;101. tdsp.Padding =PaddingMode.PKCS7;102. //Create a CryptoStream using the MemoryStream
103. //and the passed key and initialization vector (IV).
104. CryptoStream cStream = newCryptoStream( mStream,105. tdsp.CreateEncryptor( key, iv ),106. CryptoStreamMode.Write );107. //Write the byte array to the crypto stream and flush it.
108. cStream.Write( data, 0, data.Length );109. cStream.FlushFinalBlock();110. //Get an array of bytes from the
111. //MemoryStream that holds the
112. //encrypted data.
113. byte[] ret =mStream.ToArray();114. //Close the streams.
115. cStream.Close();116. mStream.Close();117. //Return the encrypted buffer.
118. returnret;119. }120. catch( CryptographicException e )121. {122. Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message );123. return null;124. }125. }126. ///
127. ///DES3 ECB模式解密
128. ///
129. /// 密钥
130. /// IV(当模式为ECB时,IV无用)
131. /// 密文的byte数组
132. /// 明文的byte数组
133. public static byte[] Des3DecodeECB( byte[] key, byte[] iv, byte[] data )134. {135. try
136. {137. //Create a new MemoryStream using the passed
138. //array of encrypted data.
139. MemoryStream msDecrypt = newMemoryStream( data );140. TripleDESCryptoServiceProvider tdsp = newTripleDESCryptoServiceProvider();141. tdsp.Mode =CipherMode.ECB;142. tdsp.Padding =PaddingMode.PKCS7;143. //Create a CryptoStream using the MemoryStream
144. //and the passed key and initialization vector (IV).
145. CryptoStream csDecrypt = newCryptoStream( msDecrypt,146. tdsp.CreateDecryptor( key, iv ),147. CryptoStreamMode.Read );148. //Create buffer to hold the decrypted data.
149. byte[] fromEncrypt = new byte[data.Length];150. //Read the decrypted data out of the crypto stream
151. //and place it into the temporary buffer.
152. csDecrypt.Read( fromEncrypt, 0, fromEncrypt.Length );153. //Convert the buffer into a string and return it.
154. returnfromEncrypt;155. }156. catch( CryptographicException e )157. {158. Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message );159. return null;160. }161. }162. #endregion
163. ///
164. ///类测试
165. ///
166. public static voidTest()167. {168. System.Text.Encoding utf8 =System.Text.Encoding.UTF8;169. //key为abcdefghijklmnopqrstuvwx的Base64编码
170. byte[] key = Convert.FromBase64String( "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4");171. byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; //当模式为ECB时,IV无用
172. byte[] data = utf8.GetBytes( "中国ABCabc123");173. System.Console.WriteLine( "ECB模式:");174. byte[] str1 =Des3.Des3EncodeECB( key, iv, data );175. byte[] str2 =Des3.Des3DecodeECB( key, iv, str1 );176. System.Console.WriteLine( Convert.ToBase64String( str1 ) );177. System.Console.WriteLine( System.Text.Encoding.UTF8.GetString( str2 ) );178. System.Console.WriteLine();179. System.Console.WriteLine( "CBC模式:");180. byte[] str3 =Des3.Des3EncodeCBC( key, iv, data );181. byte[] str4 =Des3.Des3DecodeCBC( key, iv, str3 );182. System.Console.WriteLine( Convert.ToBase64String( str3 ) );183. System.Console.WriteLine( utf8.GetString( str4 ) );184. System.Console.WriteLine();185. }186.}