Por que preciso usar a classe Rfc2898DeriveBytes (no .NET) em vez de usar diretamente a senha como chave ou IV?

Qual é a diferença entre usar Rfc2898DeriveBytes e apenas usarEncoding.ASCII.GetBytes(string object);?

Tive um sucesso relativo em qualquer uma das abordagens; a primeira é uma abordagem mais demorada, onde a última é simples e direta. Ambos parecem permitir que você faça a mesma coisa eventualmente, mas estou lutando para ver o ponto de usar o primeiro sobre o segundo.

O conceito básico que pude entender é que você pode converter senhas de string em matrizes de bytes para serem usadas, por exemplo, em uma classe de criptografia simétrica,AesManaged. Através da classe RFC, mas você pode usar valores salt e senha ao criar seu objeto rfc. Presumo que seja mais seguro, mas ainda assim é um palpite sem instrução, na melhor das hipóteses! Além disso, ele permite que você retorne matrizes de bytes de um determinado tamanho, bem, algo assim.

Aqui estão alguns exemplos para mostrar de onde eu venho:

byte[] myPassinBytes = Encoding.ASCII.GetBytes("some password");

ou

string password = "P@%5w0r]>";
byte[] saltArray = Encoding.ASCII.GetBytes("this is my salt");
Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(password, saltArray);

O objeto 'rfcKey' agora pode ser usado para configurar as propriedades .Key ou .IV em uma classe de algoritmo de criptografia simétrica.

ie

RijndaelManaged rj = new RijndaelManaged ();
rj.Key = rfcKey.Getbytes(rj.KeySize / 8); 
rj.IV = rfcKey.Getbytes(rj.Blocksize / 8);

'rj' deve estar pronto para começar!

A parte confusa ... então, ao invés de usar o objeto 'rfcKey', não posso apenas usar minha matriz 'myPassInBytes' para ajudar a configurar meu objeto 'rj'?

Eu tentei fazer isso no VS2008 e a resposta imediata é NÃO. Mas vocês receberam uma resposta mais instruída sobre o motivo pelo qual a classe RFC é usada sobre a outra alternativa que eu mencionei acima?

questionAnswers(1)

yourAnswerToTheQuestion