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