Revision: 67096
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 11, 2014 13:41 by gujingshui
Initial Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
namespace Loader
{
public sealed class SaltedHash
{
public string Salt { get { return _salt; } }
public string Hash { get { return _hash; } }
public static SaltedHash Create(string password)
{
string salt = _createSalt();
string hash = _calculateHash(salt, password);
return new SaltedHash(salt, hash);
}
public static SaltedHash Create(string salt, string hash)
{
return new SaltedHash(salt, hash);
}
public bool Verify(string password)
{
string h = _calculateHash(_salt, password);
return _hash.Equals(h);
}
private SaltedHash(string s, string h)
{
_salt = s;
_hash = h;
}
private static string _createSalt()
{
byte[] r = _createRandomBytes(saltLength);
return Convert.ToBase64String(r);
}
private static byte[] _createRandomBytes(int len)
{
byte[] r = new byte[len];
new RNGCryptoServiceProvider().GetBytes(r);
return r;
}
private static string _calculateHash(string salt, string password)
{
byte[] data = _toByteArray(salt + password);
byte[] hash = _calculateHash(data);
return Convert.ToBase64String(hash);
}
private static byte[] _calculateHash(byte[] data)
{
return new SHA1CryptoServiceProvider().ComputeHash(data);
}
private static byte[] _toByteArray(string s)
{
return System.Text.Encoding.UTF8.GetBytes(s);
}
private readonly string _salt;
private readonly string _hash;
private const int saltLength = 12;
}
}
Initial URL
Initial Description
æ¥è‡ªStockTrader Dbloader
Initial Title
创建Solted hash
Initial Tags
security
Initial Language
C#