В чем разница между использованием Rfc2898DeriveBytes и просто использованием Encoding.ASCII.GetBytes(string object);
?
У меня был относительный успех с любым подходом, первый - это более длительный подход, когда последний прост и по сути,Похоже, что оба в конечном итоге позволяют вам делать то же самое, но я изо всех сил пытаюсь увидеть смысл в использовании первого над вторым.
Основная концепция, которую я смог понять, заключается в том, что вы можете преобразовать строковые пароли в байтовые массивы, которые будут использоваться, например, для класса симметричного шифрования, AesManaged
.Через класс RFC, но вы можете использовать солт-значения и пароль при создании вашего объекта rfc.Я предполагаю, что это более безопасно, но в лучшем случае это необразованное предположение!Кроме того, он позволяет вам возвращать байтовые массивы определенного размера, ну что-то в этом роде.
Вот несколько примеров, чтобы показать вам, откуда я:
byte[] myPassinBytes = Encoding.ASCII.GetBytes("some password");
или
string password = "P@%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 используется по сравнению с другой альтернативой, которую я упомянул выше?