我有以下类,它计算我想要发送到服务器的文件的哈希值。
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我通过另一个应用程序将文件发送到服务器时,我可以看到此操作的哈希与我使用上面的代码创建的哈希有点不同:
来自其他应用程序的哈希值(正确的):
R7av4w6Ow3M3z%252bpKPBBpojzvLvyl6aM0Q7q%252bJ%252fDvLPQ%253d
Run Code Online (Sandbox Code Playgroud)
用我的代码生成的哈希:
R7av4w6Ow3M3z+pKPBBpojzvLvyl6aM0Q7q+J/DvLPQ=
Run Code Online (Sandbox Code Playgroud)
所以似乎特殊字符的编码有问题,但我还不知道如何解决这个问题。有人可以帮忙吗?提前致谢!
你的哈希值没问题。
另一个应用程序的哈希值似乎是 URL 编码的……两次!应用 URL 解码(例如使用WebUtility.UrlDecode)两次似乎可以修复它。
R7av4w6Ow3M3z%252bpKPBBpojzvLvyl6aM0Q7q%252bJ%252fDvLPQ%253d
-> URLDecode
R7av4w6Ow3M3z%2bpKPBBpojzvLvyl6aM0Q7q%2bJ%2fDvLPQ%3d
-> URLDecode
R7av4w6Ow3M3z+pKPBBpojzvLvyl6aM0Q7q+J/DvLPQ=
Run Code Online (Sandbox Code Playgroud)