java .net 3des_JAVA和C# 3DES加密解密

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.}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值