CryptDeriveKey falha no nome do algoritmo AES
Estou tentando implementar a criptografia AES no meu aplicativo. Eu tenho o código a seguir para criar uma versão em hash da senha do usuário.
PasswordDeriveBytes passwdHash = new PasswordDeriveBytes( password, salt,
"SHA1", 128 );
byte[] keyBytes = passwdHash.CryptDeriveKey( "AES", "SHA1",
192, iv );
A segunda linha lança umSystem.Security.Cryptography.CryptographicException
com a mensagem de erroObject identifier (OID) is unknown
. Usei o Reflector para verificar se o erro está sendo gerado porqueCryptDeriveKey()
não gosta do nome do algoritmo "AES" (estou usandoAesCryptoServiceProvider()
para executar a criptografia). Tentei alterar o nome para "AESManaged", "AES192" e "Rijndael", mas todos lançaram a mesma exceção.
Como faço para que isso funcione? Ou existe um método alternativo de derivar os bytes-chave? Além disso, existe alguma documentação sobre quais são as cadeias de nomes de algoritmos permitidas? Não consigo encontrar nada nos documentos do MSDN para essa função.
Estou usando o Visual Studio 2008 e o destino .NET framework 3.5
Agradeço antecipadamente por sua ajuda!