[Sql-Server], какой тип данных использовать для значений соли и хеш-пароля, и какой длины?

Я генерирую значения соли и хеша из своих паролей, используя

string salt = CreateSalt(TxtPassword.Text.Length);
string hash = CreatePasswordHash(TxtPassword.Text, salt);

private static string CreateSalt(int size)
{
    //Generate a cryptographic random number.
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    byte[] buff = new byte[size];
    rng.GetBytes(buff);

    // Return a Base64 string representation of the random number.
    return Convert.ToBase64String(buff);
}

private static string CreatePasswordHash(string pwd, string salt)
{
    string saltAndPwd = String.Concat(pwd, salt);
    string hashedPwd =
     FormsAuthentication.HashPasswordForStoringInConfigFile(
     saltAndPwd, "sha1");

    return hashedPwd;
}

Какой тип данных вы бы предложили для хранения этих значений в sql-сервере? Любое предложение...

Соль: 9GsPWpFD

Hash: E778AF0DC5F2953A00B35B35D80F6262CDBB8567

Ответ 1

ASPNET_DB говорит, что это - не может пойти не так.

Password nvarchar(128) NOT NULL,
PasswordSalt nvarchar(128) NOT NULL,

в то время как 128 может показаться много, различные типы шифрования могут привести к большим строкам, чем вы начали с. Нет абсолютно никакой причины не следить за лидерами очень умных людей, которые тратят тысячи человеко-часов на разработку системы членства в asp.net.

Ответ 2

Мы сохраняем наши пароли как двоичный SHA512 хэш