MD5 哈希算法:计算文件路径和文件内容hash值

文章介绍了MD5的TransformBlock方法用于分块处理大输入数据,TransformFinalBlock用于计算最终哈希值,而ComputeHash适合小数据量,直接计算哈希。示例代码展示了如何使用这些方法进行文件内容的哈希计算及比较。
摘要由CSDN通过智能技术生成

1.MD5.TransformBlock 是一种常见的哈希算法,可以将任意长度的输入数据计算为一个 128 位的哈希值。TransformBlock 方法将输入缓冲区中的字节块添加到 MD5 算法的内部状态中,但并不计算哈希值。通常,需要对整个输入数据调用 TransformBlock 方法,然后再调用 TransformFinalBlock 方法来计算哈希值。

    public static byte[] CreateMd5ForFiles(List<string> paths)
    {
        var md5 = MD5.Create();
        for (int i = 0; i < paths.Count; i++)
        {
            string file = paths[i];

            // hash path
            byte[] pathBytes = Encoding.UTF8.GetBytes(file.ToLower());
            md5.TransformBlock(pathBytes, 0, pathBytes.Length, pathBytes, 0);

            // hash contents
            byte[] contentBytes = File.ReadAllBytes(file);
            if (i == paths.Count - 1)
                md5.TransformFinalBlock(contentBytes, 0, contentBytes.Length);
            else
                md5.TransformBlock(contentBytes, 0, contentBytes.Length, contentBytes, 0);
        }

        return md5.Hash; // 16位
    }

2.把原文件md5file中的内容替换为上面函数返回的hash值 currentMd5:

            var md5Bytes = File.ReadAllBytes(md5File);
            unsafe
            {
                fixed (byte* p1 = md5Bytes)
                fixed (byte* p2 = currentMd5)
                {
                    return UnsafeUtility.MemCmp(p1, p2, md5len) != 0;
                }
            }

3.MD5 ComputeHash 是一种常见的哈希算法,可以将任意长度的输入数据计算为一个 128 位的哈希值。ComputeHash 方法将整个输入数据计算为哈希值,不需要先调用 TransformBlock 方法。

ComputeHash 方法有多个重载,其中最常用的重载使用一个字节数组作为输入,并返回一个字节数组作为哈希值

using System.Security.Cryptography;

string inputString = "Hello, world!";
byte[] inputBytes = Encoding.UTF8.GetBytes(inputString);

// 创建 MD5 哈希算法对象
MD5 md5 = MD5.Create();

// 计算哈希值
byte[] hash = md5.ComputeHash(inputBytes);

4.

MD5 TransformBlock 方法用于将输入数据分块处理,并将分块处理的结果存储在哈希算法的状态中。它通常与 MD5 TransformFinalBlock 方法一起使用,用于将最后一个数据块处理完成并计算哈希值。在使用 TransformBlock 方法时,需要多次调用该方法,并将每个数据块作为参数传递,最后再调用 TransformFinalBlock 方法,将最后一个数据块作为参数传递,并计算哈希值。这种方式适用于较大的输入数据,可以在处理数据的同时计算哈希值。

MD5 ComputeHash 方法则更适用于较小的输入数据,它可以一次性将所有数据计算为哈希值,并返回计算结果。在使用 ComputeHash 方法时,不需要将输入数据分块处理,也不需要使用 TransformFinalBlock 方法。

另外,MD5 TransformBlock 方法和 MD5 TransformFinalBlock 方法返回的是布尔类型的值,表示操作是否成功完成,而 MD5 ComputeHash 方法返回的是计算结果的字节数组。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值