C # RSACryptoServiceProvider. Прокладка зазор. (Шифрование пароля)

Может ли кто-нибудь прояснить «всю» историю с помощью вещи, связанной с RSA. (Я думаю, это из-за заполнения или чего-то еще).

Ok. Моя основная цель - зашифровать пароли (только одним способом) для хранения в базе данных в хешированном состоянии.

Мой подход:

Я создаю закрытые / открытые ключи с помощью этого Как сгенерировать уникальный открытый и закрытый ключи с помощью RSA (общий) подход.

const int PROVIDER_RSA_FULL = 1;
const string CONTAINER_NAME = "KeyContainer";
CspParameters cspParams;
cspParams = new CspParameters(PROVIDER_RSA_FULL);
cspParams.KeyContainerName = CONTAINER_NAME;
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
rsa = new RSACryptoServiceProvider(cspParams);

string publicPrivateKeyXML = rsa.ToXmlString(true);
string publicOnlyKeyXML = rsa.ToXmlString(false);
// do stuff with keys...

и при необходимости сделайте это:

var rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicOnlyKeyXML);
var valueToEncode = Console.ReadLine();
Console.WriteLine(Convert.ToBase64String(rsa.Encrypt(Encoding.UTF8.GetBytes(valueToEncode), false)));
// initially that's rsa.Encrypt(...

и каждый раз я выполняю шифрование с одним и тем же значением, я получаю разные значения, что не подходит для хранения пароля таким образом (поскольку я не расшифровываю его для пользователей 'аутентификации, но просто сравните хешированное значение).

Может ли кто-нибудь прояснить ситуацию с кодировкой?

А также каковы распространенные практики кодирования паролей в хэши в наши дни (.NET / C #).

Спасибо!


person Agat    schedule 10.06.2013    source источник
comment
Шифрование и хеширование - это две разные вещи. Вам нужно использовать bcrypt или PBKDFv2. Не используйте RSA.   -  person SLaks    schedule 10.06.2013
comment
Я, конечно, понимаю значение слов «хеширование» и «шифрование», но все же вопрос остается открытым.   -  person Agat    schedule 10.06.2013
comment
Тогда почему вы используете алгоритм шифрования? Шифрование не идемпотентное.   -  person SLaks    schedule 10.06.2013
comment
основной вопрос: почему эти результаты разные? (В некоторых условиях у меня есть код, который дает те же значения (у меня есть пара открытых / закрытых ключей, созданная (не мной), которая отлично работает).   -  person Agat    schedule 10.06.2013
comment
Так что, вообще говоря, о паролях и хешировании речь даже не идет. Это для того, чтобы понять, как работает код и почему значения разные.   -  person Agat    schedule 10.06.2013
comment
Да; вы видите отступы. rdist.root.org/2009/10 / 06 /   -  person SLaks    schedule 10.06.2013