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

时间:2016-11-10 08:57:09

标签: c# .net hash visual-studio-2015 windows-10-universal

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

我搜索过,发现这个:system.security.cryptography,但是我的项目中没有。

我正在使用Visual Studio 2015。

2 个答案:

答案 0 :(得分:5)

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

CryptographicBuffer 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;
}

答案 1 :(得分:0)

我将把它扔进去,只是因为它是 UWP...如果你使用 storageFolder.GetFileAsync 来获取文件,该方法将不得不返回一个异步任务或一个空值。如果这不完美,请原谅我,我对asp.net 更熟悉。但这确实会在 LocalState 文件夹中创建的文件上返回有效的 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;
    }