1

仅作为创建 MD5 哈希的示例,微软提供了以下代码示例:

MSDN 代码

// in Helpers class
public static string GetMd5Hash(MD5 md5Hash, string input)
{
    byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
    StringBuilder sBuilder = new StringBuilder(); 
    for (int i = 0; i < data.Length; i++)
    {
        sBuilder.Append(data[i].ToString("x2"));
    }
    return sBuilder.ToString();
}

并且使用它会像这样完成

public string CreateHash(string str)
{
    using (var md5Hash = MD5.Create())
    {
        return Helpers.GetMd5Hash(md5Hash, str);
    }
}

我的代码

我认为更改 Microsoft 为此提供的代码会使帮助方法的可重用性变得更容易:

// in Helpers class
public static string GetMd5Hash(string input)
{
    using (var md5Hash = MD5.Create())
    {
        byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
        StringBuilder sBuilder = new StringBuilder(); 
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        return sBuilder.ToString();
    }
}

因此,重用它会创建更少的代码行:

public string CreateHash(string str)
{
    return Helpers.GetMd5Hash(str);
}

那么不像我在第二个例子中那样做的目的是什么?我最初的想法是,使用 MSDN 提供的代码的程序员总是会意识到他们使用非托管资源的事实(这是正确的术语吗?),而如果他们使用我的实现,他们就不会。

还有其他想法吗?

4

2 回答 2

2

md5Hash如果你想在范围内重用 MSDN 代码会更有效率CreateHash

于 2013-03-03T15:02:46.153 回答
2

这个来自 msdn 的示例更加通用,因为类上有不同的重载CreateMD5允许使用不同的哈希算法。

注意他们是如何使用它的:使用这个函数的任何人都可以提供任何 MD5 类的实例,并且它会起作用。当然,正如我在评论中所说,他们的样品通常远非完美,尽管已经放入其中,但我并没有想太多

于 2013-03-03T15:09:14.603 回答