- <membership> 要素の hashAlgorithmType 属性が
a. 指定されているとき、その値。
b. 指定されていないとき、<membership> – <providers> – <add> 要素の passwordCompatMode 属性が
i. 指定されていないまたは Framework20 のとき、SHA1。
ii. Framework40 のとき、<machineKey> 要素の validation 属性の値 (既定では HMACSHA256)。 - 上記の結果が MD5、AES または TripleDES のとき、SHA1。
<system.web>
<machineKey validation="HMACSHA256" />
<membership defaultProvider="Default" hashAlgorithmType="HMACSHA256">
<providers>
<clear />
<add passwordCompatMode="Framework40"name="Default" applicationName="BusinessApplication1" connectionStringName="Business1ConnectionString"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
</system.web>
HMACSHA256 や SHA256 などを指定することが望ましいです。
static void Main()
{
string hashedPassword = Hash("P@ssw0rd", "j44YfP/l4cC9OTxsBiiQ+w==");
}private static string hashAlgorithmName = "HMACSHA256"; // 変更可能
private static Encoding encoding = Encoding.Unicode;public static byte[] Hash(byte[] data, byte[] salt)
{
using (HashAlgorithm hashAlgorithm = HashAlgorithm.Create(hashAlgorithmName))
{
if (hashAlgorithm is KeyedHashAlgorithm)
{
KeyedHashAlgorithm keyedHashAlgorithm = (KeyedHashAlgorithm)hashAlgorithm;keyedHashAlgorithm.Key = Enumerable.Range(0, keyedHashAlgorithm.Key.Length)
.Select(i => salt[i % salt.Length]).ToArray();return keyedHashAlgorithm.ComputeHash(data);
}
else
{
byte[] saltedData = salt.Concat(data).ToArray();return hashAlgorithm.ComputeHash(saltedData);
}
}
}public static string Hash(string text, string salt)
{
return Convert.ToBase64String(Hash(encoding.GetBytes(text), Convert.FromBase64String(salt)));
}// ランダムなソルトを生成します。
// SqlMembershipProvider では 16 バイトです。
public static string GenerateSalt()
{
return Convert.ToBase64String(GenerateRandomByteArray(16));
}// ランダムなバイト配列を生成します。
public static byte[] GenerateRandomByteArray(int size)
{
byte[] data = new byte[size];RandomNumberGenerator.Create().GetBytes(data);
return data;
}
2010年10月2日 18:44
[…] membership 要素 (ASP.NET 設定スキーマ) 迫りくる「暗号の2010年問題」 SqlMembershipProvider のハッシュ アルゴリズム カテゴリー: クライアント技術. タグ: .NET RIA Services, Silverlight. […]
2010年11月23日 12:38
[…] カテゴリー: .NET Framework — sakapon @ 02:11 Tags: 暗号化 前回の SqlMembershipProvider のハッシュ アルゴリズムでは SqlMembershipProvider […]