В чем разница между использованием Rfc2898DeriveBytes и просто использованием Encoding.ASCII.GetBytes(string object);
?
У меня был относительный успех при любом подходе, первый - более продолжительный подход, когда последний является простым и точным. Оба, похоже, позволяют вам делать то же самое в конечном итоге, но я изо всех сил пытаюсь понять смысл использования первого над последним.
Основная концепция, которую я смог понять, заключается в том, что вы можете преобразовать строковые пароли в
байтовые массивы, которые должны использоваться, например, для симметричного класса шифрования, AesManaged
. По RFC-классу вы можете использовать значения солей и пароль при создании вашего объекта rfc. Я предполагаю, что он более безопасен, но все же это необразованное предположение в лучшем случае! Кроме того, он позволяет вам возвращать байт-массивы определенного размера, ну что-то в этом роде.
Вот несколько примеров, чтобы показать вам, откуда я родом:
byte[] myPassinBytes = Encoding.ASCII.GetBytes("some password");
или
string password = "[email protected]%5w0r]>";
byte[] saltArray = Encoding.ASCII.GetBytes("this is my salt");
Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(password, saltArray);
Теперь объект 'rfcKey' можно использовать для настройки свойств .Key или .IV на классе симметричного алгоритма шифрования.
т.
RijndaelManaged rj = new RijndaelManaged ();
rj.Key = rfcKey.Getbytes(rj.KeySize / 8);
rj.IV = rfcKey.Getbytes(rj.Blocksize / 8);
'rj' должен быть готов к работе!
Запутанная часть... поэтому вместо использования объекта 'rfcKey' я могу не просто использовать мой 'myPassInBytes', чтобы помочь настроить мой объект 'rj'?
Я попытался сделать это в VS2008, и немедленный ответ НЕТ. Но вы, ребята, получили более образованный ответ о том, почему класс RFC используется по сравнению с другой альтернативой, о которой я упомянул выше?