在 DNX Core 5.0 中找不到类型或命名空间名称 'RNGCryptoServiceProvider'
The type or namespace name 'RNGCryptoServiceProvider' could not be found in DNX Core 5.0
我有哈希生成器class。这应该可行,但我在 Visual Studio 2015 年遇到问题。
我收到错误
The type or namespace name 'RNGCryptoServiceProvider' could not be
found (are you missing a using directive or an assembly reference?)
The type or namespace name 'SHA256Managed' could not be found (are you
missing a using directive or an assembly reference?)
问题是这在 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 年在两个框架中实现这项工作?
我的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"
}
}
感谢帮助
在 DNX Core 5.0 中,您需要添加对 System.Security.Cryptography.RandomNumberGenerator 的包引用,并从 RNGCryptoServiceProvider
切换到 RandomNumberGenerator
class.
由于 DNX Core 是跨平台的,因此 RNGCryptoServiceProvider
不再有效。 "crypto service provider" 的概念通常表示它由 CAPI 在 Windows 中实现。因此它已被替换。
尝试将 this class 的依赖项添加到 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
class 更改为 RandomNumberGenerator
并使用 Create 方法 return 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:I could not use SHA256Managed
)我发布了一个关于如何在 DNX Core 5.0
中使用 SHA256Managed
的解决方案
在 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
就够了。
我有哈希生成器class。这应该可行,但我在 Visual Studio 2015 年遇到问题。 我收到错误
The type or namespace name 'RNGCryptoServiceProvider' could not be found (are you missing a using directive or an assembly reference?)
The type or namespace name 'SHA256Managed' could not be found (are you missing a using directive or an assembly reference?)
问题是这在 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 年在两个框架中实现这项工作?
我的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"
}
}
感谢帮助
在 DNX Core 5.0 中,您需要添加对 System.Security.Cryptography.RandomNumberGenerator 的包引用,并从 RNGCryptoServiceProvider
切换到 RandomNumberGenerator
class.
由于 DNX Core 是跨平台的,因此 RNGCryptoServiceProvider
不再有效。 "crypto service provider" 的概念通常表示它由 CAPI 在 Windows 中实现。因此它已被替换。
尝试将 this class 的依赖项添加到 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
class 更改为 RandomNumberGenerator
并使用 Create 方法 return 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:I could not use SHA256Managed
)我发布了一个关于如何在 DNX Core 5.0
SHA256Managed
的解决方案
在 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
就够了。