C# 如何在UWP中散列文件(MD5,SHA..v.v..)
我正在编写一个通用应用程序,如何使用C# 如何在UWP中散列文件(MD5,SHA..v.v..),c#,.net,hash,visual-studio-2015,windows-10-universal,C#,.net,Hash,Visual Studio 2015,Windows 10 Universal,我正在编写一个通用应用程序,如何使用md5或SHA算法散列文件 我搜索后发现:system.security.cryptography,但在我的项目中不可用 我正在使用Visual Studio 2015。在UWP中,它是和 在中,有一个示例显示如何使用该类 下面是我关于获取MD5哈希的演示: private string strAlgNameUsed; public string GetMD5Hash(String strMsg) { string strAlgName = Hash
md5
或SHA
算法散列文件
我搜索后发现:system.security.cryptography
,但在我的项目中不可用
我正在使用Visual Studio 2015。在UWP中,它是和
在中,有一个示例显示如何使用该类
下面是我关于获取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访问该文件,则该方法必须返回异步任务或void。如果这不完美,请原谅,我更熟悉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;
}
private异步任务GetMD5Hash()
{
StorageFolder localFolder=ApplicationData.Current.localFolder;
var storageFolder=localFolder;//等待KnownFolders.GetFolderForUserAsync(null,KnownFolderId.PicturesLibrary);
var file=await-storageFolder.GetFileAsync(“signature.png”);
byte[]computedHash=new MD5CryptoServiceProvider().ComputeHash(File.ReadAllBytes(File.Path));
var sBuilder=新的StringBuilder();
foreach(computedHash中的字节b)
{
sBuilder.Append(b.ToString(“x2”).ToLower());
}
字符串结果=sBuilder.ToString();
返回结果;
}
不要使用ECB模式,这是不安全的,请参阅,向下滚动到企鹅模式。取而代之的是将CBC模式与随机IV一起使用,只需在加密数据前加上IV前缀,以用于解密。此外,仅对密码进行哈希运算是不够的,也不安全,需要一个密码派生函数,如PBKDF2(rfc289derivebytes
),其迭代时间约为100ms。但问题并不是关于加密,而是关于散列。@zaph,是的,虽然OP没有发布任何代码,但我只能在这里提供我认为不是好答案的文档,所以我提供了一个简单的演示来提供帮助。如果是关于ECB模式,你是对的,这是不安全的,我编辑了我的答案,删除了加密部分。实际上,这更多的是关于使用MD5进行密钥派生。密钥攻击不是对实际密钥的暴力攻击,而是对密码的暴力攻击。密钥是使用常用密码列表派生出来的。由于这个原因,使用的密钥派生方法必须消耗大量的CPU时间。