优化SHA,未传入key时,仅对数据进行哈希,不做消息认证
智能大石头 authored at 2025-12-25 16:40:59
963.00 B
X
using System;
using System.IO;
using NewLife;
using Xunit;

namespace XUnitTest.IO;

public class PathHelperHashTests
{
    [Fact]
    public void VerifyHash_AutoDetectAndPrefix_BothPass()
    {
        var file = "hash-test.txt".AsFile();
        if (file.Exists) file.Delete();
        File.WriteAllText(file.FullName, "Hello Hash");

        // MD5 32 位
        var md5 = SecurityHelper.MD5(file).ToHex();
        Assert.True(file.VerifyHash(md5));
        Assert.True(file.VerifyHash("md5$" + md5));

        // MD5 16 位(前 16 个字符)
        var md516 = md5.Substring(0, 16);
        Assert.True(file.VerifyHash(md516));
        Assert.True(file.VerifyHash("md5$" + md516));

        // CRC32 自动识别(8 位)与前缀
        var data = File.ReadAllBytes(file.FullName);
        var crc = SecurityHelper.Crc(data).ToString("X8");
        Assert.True(file.VerifyHash(crc));
        Assert.True(file.VerifyHash("crc32$" + crc));
    }
}