Тип или имя пространства имен "RNGCryptoServiceProvider" не удалось найти в DNX Core 5.0

у меня есть класс генератора хэша. Это должно работать, но у меня проблема в Visual Studio 2015. Я получаю ошибки

имя типа или пространства имен "RNGCryptoServiceProvider" не может быть найдено (отсутствует директива using или ссылка на сборку?)

не удалось найти тип или имя пространства имен "SHA256Managed" (вы отсутствует директива using или ссылка на сборку?)

проблема в том, что это существует в DNX 4.5.1, но не в DNX Core 5.0

public class HashGenerator : IHashGenerator
{
    public string GenerateHash(string input, String salt)
    {
        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(input + salt);
        SHA256Managed sha256hashstring = new SHA256Managed();
        byte[] hash = sha256hashstring.ComputeHash(bytes);
        return Convert.ToBase64String(bytes);
    }

    public string CreateSalt(int size)
    {
        var rng = new RNGCryptoServiceProvider();
        var buff = new byte[size];
        rng.GetBytes(buff);
        return Convert.ToBase64String(buff);
    }
}

Как сделать эту работу в рамках в Visual Studio 2015 г?

мой проект.файл json

 "dependencies": {
    "EntityFramework.Commands": "7.0.0-beta8-15718",
    "4tecture.DataAccess.Common": "1.0.0-*",
    "4tecture.DataAccess.EntityFramework": "1.0.0-*",
    "EntityFramework.Relational": "7.0.0-beta8-15723",
    "EntityFramework.SqlServer": "7.0.0-beta8-15797",
    "Microsoft.Framework.ConfigurationModel": "1.0.0-beta5-11337"
  },

  "frameworks": {
    "dnx451": {
      "dependencies": {
      }
    },
    "dnxcore50": {
      "dependencies": {
        "System.Linq": "4.0.1-beta-23302",
        "System.Runtime.Serialization.Primitives": "4.0.11-beta-23302"
      }
    }

Спасибо за помощь

4 ответов


В DNX Core 5.0 вам нужно добавить ссылку на пакет


решение, которое я реализовал в конце.

 public class HashGenerator : IHashGenerator
    {
        public string GenerateHash(string input, string salt)
        {
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(input + salt);
            var hashAlgoritm = System.Security.Cryptography.MD5.Create();
            bytes = hashAlgoritm.ComputeHash(bytes);
            return Convert.ToBase64String(bytes);
        }

        public string CreateSalt()
        {
            var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
            var buff = new byte[25];
            rng.GetBytes(buff);
            return Convert.ToBase64String(buff);
        }
    }

Я не мог использовать SHA256Managed, у меня была проблема пространства все время. И это не требует каких-либо изменений в проекте.файл json


попробуйте добавить зависимость для этот класс до

"dependencies": {
"EntityFramework.Commands": "7.0.0-beta8-15718",
"4tecture.DataAccess.Common": "1.0.0-*",
"4tecture.DataAccess.EntityFramework": "1.0.0-*",
"EntityFramework.Relational": "7.0.0-beta8-15723",
"EntityFramework.SqlServer": "7.0.0-beta8-15797",
"Microsoft.Framework.ConfigurationModel": "1.0.0-beta5-11337"
  },

    "frameworks": {
     "dnx451": {
     "dependencies": {
    }
 },
"dnxcore50": {
  "dependencies": {
    "System.Linq": "4.0.1-beta-23302",
    "System.Runtime.Serialization.Primitives": "4.0.11-beta-23302",
    "System.Security.Cryptography.Algorithms": "4.0.0-beta-23225",
    "System.Security.Cryptography.RandomNumberGenerator": "4.0.0-beta-23225"
  }
}

а затем изменение RNGCryptoServiceProvider класс RandomNumberGenerator и с помощью метода Create, чтобы вернуть экземпляр RNGCryptoServiceProvider.

public class HashGenerator : IHashGenerator
{
  public string GenerateHash(string input, String salt)
  {
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(input + salt);
    SHA256Managed sha256hashstring = new SHA256Managed();
    byte[] hash = sha256hashstring.ComputeHash(bytes);
    return Convert.ToBase64String(bytes);
  }

  public string CreateSalt(int size)
  {
    var rng = RandomNumberGenerator.Create();
    var buff = new byte[size];
    rng.GetBytes(buff);
    return Convert.ToBase64String(buff);
  }
}

так как ответ неполный (OP:I could not use SHA256Managed) Я отправляю решение о том, как использовать SHA256Managed В DNX Core 5.0

в DNX 4.5.1

HashAlgorithm hash = new SHA256Managed();

в DNX Core 5.0 (который также работает с DNX 4.5.1)

HashAlgorithm hash = SHA256.Create();

то же самое относится ко всем битам (384, 512..)

и вам не нужны пакеты, зависящие от версии. просто using System.Security.Cryptography достаточно.