Parece que necesita leer en la clase Rfc2898DeriveBytes.
Rfc2898DeriveBytes.GetBytes();
Tiene un método (arriba) que le permite adaptar el tamaño de las matrices de bytes que se introducen en las propiedades .KEY y .IV en un algoritmo de cifrado simétrico, simplemente alimentando un valor int. El libro oficial MS 70-536 sugiere hacer esto pro-gramaticalmente dividiendo la propiedad KeySize/8.
I.e TripleDes o AESManaged. Sea lo que sea que uses, el algoritmo en sí tendrá algunos requisitos previos que necesitarán reunirse primero. Es decir, que satisface las condiciones de tamaño de clave. RunTime rellenará automáticamente las propiedades, los campos, etc., los mejores y más sólidos valores para usted. Pero el IV y Key deben venir de ti. Esto cómo se puede hacer lo siguiente:
RijndaelManaged myAlg = new RiRijndaelManaged();
byte[] salt = Encoding.ASCII.GetBytes("Some salt value");
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes("some password", salt);
myAlg.Key = key.GetBytes(myAlg.KeySize/8);
myAlg.IV = key.GetBytes(myAlg.BlockSize/8);
// myAld should now fully set-up.
anterior se puede ver lo que quiero decir por hacerlo pro-gramatical, ya que más o menos debe hacerlo todo para usted, sin que ni siquiera tener que realmente alteró -lid en cuanto a cumplir con sus requisitos previos.
El libro Microsoft 70-536 indica que las propiedades .Key esperan que las matrices de bytes proporcionen en bytes y no en bits. La clase RFC funciona en bytes donde, como algoritmos, la propiedad KeySize funciona en bits. 1 byte = 8 bits. ¿Puedes ver a dónde va esto ...? Esto debería darle una idea de por qué la porción de código de ejemplo anterior se realiza de la manera que es. ¡Lo estudié y me parece bastante sensato!
La respuesta anterior debería permitirle crear su objeto de algoritmo con la contraseña proporcionada y un valor de sal estático que puede ser un código duro en ambos extremos. Lo único que debe hacer es preocuparse de cómo asegurarse de que las matrices de bytes almacenadas en .Key y .IV se transporten de forma segura a un destinatario para que pueda descifrar correctamente el mensaje cifrado. Al reconstruir de forma segura el mismo objeto de algoritmo.
OBTW:
AESManaged tiene un tamaño de clave req ': 128 bits = 16 Bytes !!! (8 * 8 = 64, 64 bits/8 bits por byte = 8 bytes) Por lo tanto,
64 * 2 = 128 bits, 8 * 2, ==> ¡Tamaño de la tecla de 16 bytes!
256Bit = 32Bytes !!!!
De acuerdo con el libro oficial kit de formación 70-536, Aes se limita a tener tamaño de clave de 128 bits de tamaño. 256bits, 192 y 128 key size por ejemplo se pueden usar con la clase Rijndael.
Usted podría por el contrario olvidar por completo toda esa basura y simplemente utilizar métodos .GenerateKey y GenerateIV en lugar de ahorrar todos los problemas de la clasificación de los valores de una sal estáticas contraseña y pre-compartida y acordada. Su única preocupación es descubrir una forma de almacenar y recuperar la clave y las matrices de IV byte. Formateador binario? .
Si desea utilizar AES256, su clave debe ser de 32 bytes y establecer KeySize property = 256. sino que usará AES 128. Puede utilizar todos los ceros, pero en el contexto de la seguridad, no tiene sentido hacerlo como no es seguro. Sí, mejor generar clave aleatoria (como en la respuesta de Michael Howard-MSFT) y almacenar de forma segura. –