以前用MD5的时候都是一种模式, 参数String, 返回String, 而且只在.NET中使用, 还挺正常的, 这次跟JAVA的通信发现为啥MD5的结果还不一样了涅?
啥也别说了, 先上代码:

Code-1:

代码
 1         /// <summary>
 2         /// 获得MD5加密编码
 3          /// </summary>
 4         /// <param name="input">输入文字串</param>
 5         /// <returns>加密结果</returns>
 6         public static string GetMd5(string input)
 7         {
 8             string str = string.Empty;
 9             MD5 md = MD5.Create();
10             MemoryStream stream = new MemoryStream();
11             StreamWriter writer = new StreamWriter(stream);
12             StreamReader reader = new StreamReader(stream);
13             if (input == null)
14             {
15                 input = string.Empty;
16             }
17             writer.Write(input);
18             writer.Flush();
19             stream.Seek(0L, SeekOrigin.Begin);
20             byte[] buffer = md.ComputeHash(stream);
21             stream.SetLength(0L);
22             writer.Flush();
23             for (int i = 0; i < buffer.Length; i++)
24             {
25                 writer.Write("{0:X2}", buffer[i]);
26             }
27             writer.Flush();
28             stream.Seek(0L, SeekOrigin.Begin);
29             str = reader.ReadToEnd();
30             writer.Close();
31             writer.Dispose();
32             reader.Close();
33             reader.Dispose();
34             stream.Close();
35             stream.Dispose();
36             return str;
37         }

 

 

Code-2:

代码
 1         /// <summary>
 2         /// 获得字节型MD5加密编码
 3          /// </summary>
 4         /// <param name="input">输入文字串</param>
 5         /// <returns>加密结果</returns>
 6         public static byte[] GetMd5Byte(string input)
 7         {
 8             MD5 md = MD5.Create();
 9             MemoryStream stream = new MemoryStream();
10             if (input == null)
11             {
12                 input = string.Empty;
13             }
14             stream.Seek(0L, SeekOrigin.Begin);
15             byte[] buffer = md.ComputeHash(stream);
16             stream.Seek(0L, SeekOrigin.Begin);
17             writer.Close();
18             writer.Dispose();
19             reader.Close();
20             reader.Dispose();
21             stream.Close();
22             stream.Dispose();
23             return buffer;
24         }

看出来问题没? 其实两个函数完全一样, 只是第二个是返回byte[]的, 之后再System.Text.Encoding.UTF8.GetString一下就行了.

但是这两个函数的结果却大相径庭, 完全不一样啊, 不信你试试?O(∩_∩)O哈哈~

posted on 2010-05-10 18:11  TonyKent  阅读(576)  评论(0编辑  收藏  举报