Никакой :
2.4.1. Строка и литералы Байтов
... Без обиняков: Оба типа литералов могут быть включены в соответствие одинарным кавычкам (
'
) или двойные кавычки ("
). Они могут также быть включены в соответствие группам из трех одинарных или двойных кавычек (они обычно упоминаются как трижды заключенные в кавычки строки). Символ (\
) обратной косой черты привык к символам ESC, которые иначе имеют особое значение, такое как новая строка, сама обратная косая черта или символ кавычки...
Какой алгоритм хеширования по умолчанию, который использует членство в ASP.NET? хорошо обсуждает их алгоритм по умолчанию.
Надеюсь, это поможет!
Править- Ответ, который я имел в виду, - это код в верхнем сообщении,
public string EncodePassword(string pass, string salt)
{
byte[] bytes = Encoding.Unicode.GetBytes(pass);
//byte[] src = Encoding.Unicode.GetBytes(salt); Corrected 5/15/2013
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);
}
Они объединяют Unicode Salt + Pass с помощью BlockCopy
- В ответ на ваш вопрос:
Оба алгоритма необходимы и выполняют разные роли .. .
RNG Crypto используется для генерации соли. По сути, это длинная строка случайных данных. Он создается и сохраняется для каждого пользователя. Обычно это делается при создании пользователя или изменении пароля.
BlockCopy - это всего лишь метод, который они используют для объединения соли с паролем. Приведенный выше код по существу соответствует соли + пароль.
Вы не сможете воссоздать значение соли, так как оно полностью случайное. Однако фреймворк сохраняет его для каждого пользователя.
Объединение соли с паролем и его хеширование с использованием описанной выше техники позволит вам проверять пароли пользователей, используя хешированное значение, сохраненное платформой.
Думаю, мы оба читаем ваш вопрос по-разному. Код, который я опубликовал, не будет генерировать вашу соль, но он позволит вам использовать его таким образом, который совместим с членством в ASP.NET.
Извините, мое объяснение не самое лучшее - это ответ на ваш вопрос?
Вот один из способов сделать это. Соль - это просто случайное число, вы можете использовать класс RNGCryptoServiceProvider в библиотеке фреймворка, чтобы получить хорошее случайное число для использования в качестве соли
private const int ITERATIONS = 10000;
private const int SALT_SIZE = 32;
private const int HASH_SIZE = 32;
public void SaltAndHashPassword(string password, out byte[] salt,
out byte[] hash)
{
Rfc2898DeriveBytes rdb = new Rfc2898DeriveBytes(
password,
SALT_SIZE,
ITERATIONS);
salt = rdb.Salt;
hash = rdb.GetBytes(HASH_SIZE);
}