ASP.NET成员资格使用的默认哈希算法是什么?我该如何改变它呢?
发布于 2012-01-27 21:54:24
above answer by Ryan Christensen不完整。它将盐转换为byte[]的部分不正确。
这是我在一个客户端的解决方案中实现的一个工作示例:
public string Hash(string value, string salt)
{
byte[] bytes = Encoding.Unicode.GetBytes(value);
byte[] src = Convert.FromBase64String(salt);
byte[] dst = new byte[src.Length + bytes.Length];
Buffer.BlockCopy(src, 0, dst, 0, src.Length);
Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);
HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
byte[] inArray = algorithm.ComputeHash(dst);
return Convert.ToBase64String(inArray);
}
发布于 2009-07-16 13:07:09
默认的哈希算法类型是SHA1。有两种方法可以改变这一点。
1)如果您使用的是IIS 7,则可以使用"Machine Key“配置(如下所示)进行更新。这允许您从可用选项列表中选择加密方法,并指定密钥或密钥生成选项。
2)如果您使用的是IIS6,您可以使用web.config文件中的membership元素更改散列算法类型:
<membership
defaultProvider="provider name"
userIsOnlineTimeWindow="number of minutes"
hashAlgorithmType="SHA1">
<providers>...</providers>
</membership>
根据文档,hashAlgorithmType属性的字符串值可以是所提供的任何.Net散列算法类型。稍微挖掘一下就会发现,ASP.Net 2、3和3.5的有效值是MD5
、RIPEMD160
、SHA1
、SHA256
、SHA384
和SHA512
。这里最重要的部分是所有这些类都继承自HashAlgorithm
。
hashAlgorithmType属性的值也可以是来自machine.config文件中cryptoNameMapping元素的条目。如果你需要第三方散列算法,你可以使用它。如果您使用的是C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG
2或更高版本,则通常可以在ASP.Net中找到machine.config文件。您可以阅读有关设置这些值here的更多信息。
发布于 2010-11-20 01:24:02
在.NET 4.0框架中,默认的哈希算法更改为HMACSHA256。
请注意,与SHA-1不同,HMAC SHA-256是密钥哈希。如果您的散列行为是不确定的,那么您可能没有设置密钥,从而强制它使用随机密钥。与下面类似的东西将是罪魁祸首(这是我花了一个小时才弄清楚的:p )。
HashAlgorithm.Create(Membership.HashAlgorithmType)
如果您希望它与现有的提供程序一起工作,您可以使用this guide将其恢复为以前的默认值。
https://stackoverflow.com/questions/1137368
复制相似问题