如何在 UWP 中散列文件 (MD5, SHA..v.v..)

How to hash file (MD5, SHA..v.v..) in UWP

我正在编写通用应用程序,如何使用 md5SHA 算法对文件进行哈希处理?

我搜索了一下,找到了这个:system.security.cryptography,但它在我的项目中不可用。

我正在使用 Visual Studio 2015.

在 UWP 中,它是 Windows.Security.Cryptography namespace and Windows.Security.Cryptography.Core namespace

CryptographicBuffer class 中有示例显示如何使用此 class。

这是我关于获取 MD5 哈希的演示:

private string strAlgNameUsed;

public string GetMD5Hash(String strMsg)
{
    string strAlgName = HashAlgorithmNames.Md5;
    IBuffer buffUtf8Msg = CryptographicBuffer.ConvertStringToBinary(strMsg, BinaryStringEncoding.Utf8);

    HashAlgorithmProvider objAlgProv = HashAlgorithmProvider.OpenAlgorithm(strAlgName);
    strAlgNameUsed = objAlgProv.AlgorithmName;

    IBuffer buffHash = objAlgProv.HashData(buffUtf8Msg);

    if (buffHash.Length != objAlgProv.HashLength)
    {
        throw new Exception("There was an error creating the hash");
    }

    string hex = CryptographicBuffer.EncodeToHexString(buffHash);

    return hex;
}

我要把它扔进去,只是因为它是 UWP...如果您使用 storageFolder.GetFileAsync 获取文件,该方法将必须 return 一个异步任务或空虚。如果这不完美,请原谅我,我对 asp.net 更熟悉。但这会对在 LocalState 文件夹中创建的文件进行 return 有效的 MD5 哈希:

private async Task<string> GetMD5Hash()
    {
        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        var storageFolder = localFolder; // await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary);
        var file = await storageFolder.GetFileAsync("signature.png");

        byte[] computedHash = new MD5CryptoServiceProvider().ComputeHash(File.ReadAllBytes(file.Path));
        var sBuilder = new StringBuilder();
        foreach (byte b in computedHash)
        {
            sBuilder.Append(b.ToString("x2").ToLower());
        }
        string result = sBuilder.ToString();
        return result;
    }