Я использовал рефлектор, чтобы взглянуть на те методы, которые использует .NET-Framework для внутреннего использования. Возможно, для этого есть открытые методы, но я их не нашел - если вы знаете, как запрашивать эти внутренние методы как пользователь, оставьте комментарий! :)
Вот упрощенный исходный код без лишних условий, потому что я хочу только закодировать пароль как SHA1-хэш:
private string GenerateSalt() {
var buf = new byte[16];
(new RNGCryptoServiceProvider()).GetBytes(buf);
return Convert.ToBase64String(buf);
}
private string EncodePassword(string pass, string salt) {
byte[] bytes = Encoding.Unicode.GetBytes(pass);
byte[] src = Convert.FromBase64String(salt);
byte[] dst = new byte[src.Length + bytes.Length];
byte[] inArray = null;
Buffer.BlockCopy(src, 0, dst, 0, src.Length);
Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);
HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
inArray = algorithm.ComputeHash(dst);
return Convert.ToBase64String(inArray);
}