我正在编写通用应用程序,如何使用md5
或SHA
算法对文件进行哈希处理?
我搜索过,发现这个:system.security.cryptography
,但是我的项目中没有。
我正在使用Visual Studio 2015。
答案 0 :(得分:5)
在UWP中,它是Windows.Security.Cryptography namespace和Windows.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;
}