当前位置:编程学习 > C#/ASP.NET >>

请问怎样获取一个文件的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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,