仅举一个创建MD5哈希的示例,microsoft提供了以下代码示例:
// 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提供的代码,总是意识到他们使用非托管资源这一事实(这是正确的术语吗?) ,如果他们使用我的实施,他们就不会。
还有其他想法吗?
答案 0 :(得分:2)
如果您想重用md5Hash
CreateHash
,MSDN代码会更有效率
答案 1 :(得分:2)
This示例更具通用性,因为Create
类上有MD5
的不同重载,允许使用不同的散列算法。
注意他们如何使用它:使用此函数的任何人都可以提供MD5类的任何实例,它将起作用。当然,正如我在评论中所说的那样,他们的样本通常远非完美,我不会想太多但是已经把它放进去了