Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在UWP中散列文件(MD5,SHA..v.v..)_C#_.net_Hash_Visual Studio 2015_Windows 10 Universal - Fatal编程技术网

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时间。