【发布时间】:2021-11-25 21:15:48
【问题描述】:
我有以下类计算我要发送到服务器的文件的哈希值。
public class GetHashCode
{
public static string CalculateHash()
{
try
{
var filePath = "\\\\abc\\abc-fs\\_My-Data\\user\\Documents\\test.jpg";
var fileStream = File.Open(filePath, FileMode.Open,
FileAccess.Read, FileShare.ReadWrite);
var hashProvider = SHA256.Create();
var buffer = hashProvider.ComputeHash(fileStream);
return Convert.ToBase64String(buffer);
}
catch (Exception err)
{
Console.WriteLine(err);
return null;
}
}
}
当我通过另一个应用程序将文件发送到服务器时,我可以看到此操作的哈希与我使用上面的代码创建的哈希有点不同:
来自其他应用程序的哈希(正确的):
R7av4w6Ow3M3z%252bpKPBBpojzvLvyl6aM0Q7q%252bJ%252fDvLPQ%253d
使用我的代码生成的哈希:
R7av4w6Ow3M3z+pKPBBpojzvLvyl6aM0Q7q+J/DvLPQ=
所以好像特殊字符的编码有问题,但是我还不知道怎么解决。有人可以帮忙吗?提前致谢!
【问题讨论】:
-
注意:This:
catch (Exception err) { Console.WriteLine(err); return null; }是一种反模式,因为它隐藏了问题并使调试更加困难。如果在哈希生成过程中出现问题,您希望程序因“真正的”异常而崩溃,而不是因为方法返回null而遇到一些难以诊断的后续错误。如果您有时间,请阅读"fail early" concept。 -
感谢您的建议,我一定会看看!