Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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# 类型或命名空间名称';RNGCryptoServiceProvider';在DNX Core 5.0中找不到_C#_.net_Dnx - Fatal编程技术网

C# 类型或命名空间名称';RNGCryptoServiceProvider';在DNX Core 5.0中找不到

C# 类型或命名空间名称';RNGCryptoServiceProvider';在DNX Core 5.0中找不到,c#,.net,dnx,C#,.net,Dnx,我有一个哈希生成器类。这应该行得通,但我在Visual Studio 2015中遇到了问题。 我会犯错误 无法找到类型或命名空间名称“RNGCryptoServiceProvider” 找到(是否缺少using指令或程序集引用?) 找不到类型或命名空间名称“SHA256Managed”(是否为“”) 缺少使用指令或程序集引用?) 问题是DNX 4.5.1中存在这种情况,但DNX Core 5.0中不存在这种情况 public class HashGenerator : IHashGenerato

我有一个哈希生成器类。这应该行得通,但我在Visual Studio 2015中遇到了问题。 我会犯错误

无法找到类型或命名空间名称“RNGCryptoServiceProvider” 找到(是否缺少using指令或程序集引用?)

找不到类型或命名空间名称“SHA256Managed”(是否为“”) 缺少使用指令或程序集引用?)

问题是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);
    }
}
如何在VisualStudio2015的两个框架中都实现这一点

myproject.json文件

“依赖项”:{
“EntityFramework.Commands”:“7.0.0-beta8-15718”,
“4tecture.DataAccess.Common”:“1.0.0-*”,
“4架构.数据访问.实体框架”:“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”
},
“框架”:{
“dnx451”:{
“依赖项”:{
}
},
“dnxcore50”:{
“依赖项”:{
“System.Linq”:“4.0.1-beta-23302”,
“System.Runtime.Serialization.Primitives”:“4.0.11-beta-23302”
}
}

感谢DNX Core 5.0中的帮助

,您需要添加一个包引用,并从
RNGCryptoServiceProvider
切换到
RandomNumberGenerator


由于DNX核心是跨平台的,因此,
RNGCryptoServiceProvider
无法再工作。“加密服务提供商”的概念通常意味着它是由Windows中的CAPI实现的。因此它已被替换。

尝试将的依赖项添加到
project.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);
  }
}

我在最后实现的解决方案

 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,我一直都有名称空间问题。它不需要在project.json文件中做任何更改,因为答案不完整(OP:
我不能使用SHA256Managed
),我正在发布一个解决方案,介绍如何在DNX Core 5.0中使用
SHA256Managed

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);
    }
}
在DNX 4.5.1中

HashAlgorithm hash = new SHA256Managed();
HashAlgorithm hash = SHA256.Create();
在DNX Core 5.0中(也适用于DNX 4.5.1)

这同样适用于所有位(384512..)


而且您不需要任何版本相关的软件包。只需
使用System.Security.Cryptography
就足够了。

RandomNumberGenerator是抽象类。我无法创建此实例。我相信您可以将其用作
System.Security.Cryptography.RandomNumberGenerator.create()
。如何使用SHA1CryptoServiceProvider?RandomNumberGenerator是抽象类。我无法创建此类的实例。@user2451446检查我的编辑我更改了编码并添加了一个新的程序集System.Security.Cryptography.Algorithms。好的,谢谢,我将在明天的工作中尝试。这也能解决SHA256Managed的命名空间问题吗?@user2451446是的我t应该建议至少使用sha256。而不是键入:
var hashAlgoritm=System.Security.Cryptography.MD5.Create();
type:
var hashAlgoritm=System.Security.Cryptography.sha256.Create();
在.net核心中管理的sha256现在是sha256.Create()