如何在 UWP 中散列文件 (MD5, SHA..v.v..)
How to hash file (MD5, SHA..v.v..) in UWP
我正在编写通用应用程序,如何使用 md5
或 SHA
算法对文件进行哈希处理?
我搜索了一下,找到了这个: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;
}
我正在编写通用应用程序,如何使用 md5
或 SHA
算法对文件进行哈希处理?
我搜索了一下,找到了这个: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;
}