以前用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 }
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 }
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哈哈~