UWP中的密码哈希

时间:2017-02-23 12:04:16

标签: c# hash uwp

我在.net框架中有以下代码。

public string GetHashedPassword(string password, string salt)
    {
        byte[] saltArray = Convert.FromBase64String(salt);
        byte[] passArray = Convert.FromBase64String(password);
        byte[] salted = new byte[saltArray.Length + passArray.Length];
        byte[] hashed = null;

        saltArray.CopyTo(salted, 0);
        passArray.CopyTo(salted, saltArray.Length);

        using (var hash = new SHA256Managed())
        {
            hashed = hash.ComputeHash(salted);
        }

        return Convert.ToBase64String(hashed);
    }

我正在尝试为UWP应用程序创建等效的.net核心。这是我到目前为止所拥有的。

public string GetHashedPassword(string password, string salt)
  {
        IBuffer input = CryptographicBuffer.ConvertStringToBinary(password + salt, BinaryStringEncoding.Utf8);
        var hashAlgorithm = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256);
        var hash = hashAlgorithm.HashData(input);

        //return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, hash);
    }

将缓冲区转换回字符串的最后一行不起作用。我得到了这个例外:

目标多字节代码页中不存在Unicode字符的映射。

如何将缓冲区转换回字符串?

1 个答案:

答案 0 :(得分:1)

我假设您希望以base64格式获取哈希密码,因为您在.net示例中执行了此操作。
为此,请更改:

CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, hash);

为:

CryptographicBuffer.EncodeToBase64String(hash);

所以完整的方法如下所示:

public string GetHashedPassword(string password, string salt)
        {

            IBuffer input = CryptographicBuffer.ConvertStringToBinary(password + salt, BinaryStringEncoding.Utf8);
            var hashAlgorithm = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256);
            var hash = hashAlgorithm.HashData(input);

            return CryptographicBuffer.EncodeToBase64String(hash);
        }