como chamar RijndaelAlg.CreateEncryptor em C# corretamente ao salvar muitos arquivos independentes

StackOverflow https://stackoverflow.com/questions/3273672

Pergunta

Na minha situação, tenho vários arquivos que serão armazenados em um servidor.Cada um desses arquivos é criado por um aplicativo C# que estou escrevendo.

fundo:Para esta aplicação, a quantidade de tempo necessária para criptografar não é importante, os arquivos tendem a ser pequenos e temos muitos ciclos de CPU de sobra (o cliente é o único computador que criptografa ou descriptografa os dados).

Cada arquivo não está relacionado e preciso que o conteúdo seja protegido contra espionagem pelo administrador do sistema ou por qualquer pessoa que tenha acesso ao disco rígido (suponha que seja um bandido)

meu entendimento é que RijndaelAlg é um algoritmo sólido para esse tipo de operação?presumindo que esta informação esteja correta, como usar corretamente a função RijndaelAlg.CreateEncryptor?

a usabilidade que desejo é que meu usuário digite uma senha, suponha que a senha seja uma boa senha.

minhas perguntas são

  1. qual a melhor forma de converter uma string inserida pelo usuário (string 'C #) em um byte []?Presumo que devo fazer hash para contornar o problema de ter 0 em todos os outros caracteres.qual a melhor forma de fazer essa conversão?

  2. o que devo usar para o IV?Entendo que este é um valor que deve ser preenchido (mesmo que o MSDN diga que não há problema em passar 'nulo').o que devo usar para esse valor?tenha em mente que, na minha situação, tenho vários arquivos independentes que precisam ser descriptografados de forma independente.

    e se o IV for bem conhecido, isso é um problema?(posso usar um hash do nome do arquivo, pois é um valor único)

  3. existe um algoritmo melhor que o RijndaelAlg para criptografar muitos arquivos independentes usando a mesma senha?

Foi útil?

Solução

Q1.Normalmente uso o método GetBytes() da classe UTF8 para converter strings em matrizes de bytes.

Encoding.UTF8.GetBytes(myString)

Q2.Cada vez que você cria uma instância da classe RijndaelManaged, um IV é gerado aleatoriamente para você (acessível usando a propriedade IV).Você pode tornar isso aleatório novamente chamando o método GenerateIV().

Como você precisa desse IV para descriptografar dados, talvez seja melhor armazená-lo em algum lugar, em vez de ter um IV exclusivo por arquivo.Se você criptografar todos os seus arquivos usando um IV estático, certifique-se de definir o IV ao criar uma nova instância da classe RijndaelManaged sempre que descriptografar um arquivo.

Q3.RijndaelManaged/AES é o algoritmo mais seguro que existe, eu não usaria nada diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top