请问怎样获取一个文件的md5消息摘要?
为了判断两个文件是否相同,我需要通过计算这两个文件的md5消息摘要,请问怎么编码实现? --------------------编程问答-------------------- 好贴...关注 --------------------编程问答-------------------- http://www.ietf.org/rfc/rfc1321.txt --------------------编程问答-------------------- 可以使用 byte[] MD5CryptoServiceProvider.ComputeHash(byte[]) 方法 --------------------编程问答-------------------- 先读取这两个文件到Byte[]数组中,然后用MD5.ComputeHash()方法来获取它们的MD5值! --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- public string MD5(String str){
MD5 md5 = new MD5CryptoServiceProvider();
byte[] data = System.Text.Encoding.Default.GetBytes(str);
byte[] result = md5.ComputeHash(data);
String ret = "";
for (int i = 0; i < result.Length; i++)
ret += result[i].ToString("x").PadLeft(2, '0');
return ret;
} --------------------编程问答-------------------- FileStream打开一个文件流
直接MD5文件流 似乎FileStream不能打开超过2G的文件 --------------------编程问答-------------------- using System.Security.Cryptography;
using System.Text;
public static string getFileHash(string filePath)
{
FileStream fs = new FileStream(filePath, FileMode.Open);
int len = (int)fs.Length;
byte[] data = new byte[len];
fs.Read(data, 0, len);
fs.Close();
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(data);
string sResult = "";
foreach(byte b in result)
{
sResult += Convert.ToString(b,16);
}
return sResult;
}
--------------------编程问答-------------------- 同意楼上HASH --------------------编程问答-------------------- viena(维也纳N02)的方法基本可用,但对于大文件是有问题的,也不能带进度条提取文件的MD5,最好将
sResult += Convert.ToString(b,16);
修改为
sResult += Convert.ToString(b,16)).PadLeft(2, '0');
带进度条的提取文件的MD5,见《程序员秘书》--源代码--目录及文件--生成文件或字符串的MD5
详见:http://www.psec.net.cn --------------------编程问答-------------------- ComputeHash()本身就支持FileStream的
FileStream fs = new FileStream(buttonEditFile.Text, FileMode.Open, FileAccess.Read);
MD5 md5 = MD5.Create();
byte[] code = md5.ComputeHash(fs);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < code.Length; i++)
sb.Append(code[i].ToString("X2"));
textEditResult.Text = sb.ToString();
--------------------编程问答-------------------- 汗,楼上说的是
不用那么麻烦,可以直接传入FileStream
public static string getFileHash(string filePath)
{
FileStream fs = new FileStream(filePath, FileMode.Open);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(fs);
fs.Close();
string sResult = "";
foreach(byte b in result)
{
sResult += Convert.ToString(b,16);
}
return sResult;
} --------------------编程问答-------------------- 打个标记 --------------------编程问答-------------------- 学习一下 --------------------编程问答-------------------- MARK
学习 --------------------编程问答-------------------- 请问个比较弱的问题
public static string getFileHash(string filePath)
一定要static么?
在这里有什么作用?
补充:.NET技术 , C#