Utilizando Cryptography Application Block em uma página ASP.Net
 


Colaboração de : Avelino Ferreira Gomes Filho

Você algum dia já precisou utilizar algum tipo de criptografia em um site que você desenvolveu. Provavelmente você perdeu algum tempo colocando a sua criptografia para funcionar seja no Visual Studio 6.0 ou no .Net. Agora, a Microsoft criou a Enterprise Library, que além de resolver muitos problemas, como por exemplo, acesso a dados e tratamento de exceções, resolve também boa parte do trabalho que você tem com a criptografia das suas aplicações.

Antes de começarmos a descrever a utilização do Cryptography Application Block, vamos discutir alguns termos que vamos tratar nesse artigo.

Microsoft patterns & practices: Como o próprio nome diz, é uma coletânea das melhores práticas e padrões criados pela Microsoft para facilitar a vida dos desenvolvedores que utilizam as plataformas dessa empresa. Mais informações em http://www.microsoft.com/resources/practices/default.mspx

Enterprise Library: Uma coletânea com algumas aplicações que podem ser reutilizadas e estendidas para desenvolvimento na arquitetura .Net. Mais informações em http://msdn.microsoft.com/library/en-us/dnpag2/html/entlib.asp Download da versão de Janeiro de 2005 em http://www.microsoft.com/downloads/details.aspx?FamilyId=0325B97A-9534-4349-8038-D56B38EC394C&displaylang=en

Cryptography Application Block: Bloco de aplicação auxilia o desenvolvedor que deseje utilizar criptografia simétrica e / ou algoritmos Hash em suas aplicações. Mais informações em http://www.microsoft.com/downloads/details.aspx?FamilyId=0325B97A-9534-4349-8038-D56B38EC394C&displaylang=en

Criptografia Simétrica: A criptografia simétrica utiliza a mesma chave para encriptar e decriptar uma mensagem. Um exemplo de utilização de chave simétrica poderia ser o seguinte.

Digamos que você precisa acessar um site de FTP com um usuário e senha diferente do "anonymous". Vamos supor também que o login e a senha desse usuário estão guardados em uma tabela no seu banco de dados. Neste caso você pode utilizar a criptografia simétrica para proteger o login e senha do seu usuário FTP. Você pode criptografar simetricamente os dados desejados e guardá-los de forma segura no banco. Quando você necessitar utilizar o usuário do FTP você poderá obter os dados criptografados, descriptografá-los e enviar para a sua classe de manipulação de FTP.

Hash: É um algorítmo matemático que converte uma mensagem de qualquer tamanho em uma cadeia de caracteres única de tamanho fixo conhecida como "Message Digest" (Mensagem compilada), que representa a mensagem original. Uma vez que a mensagem é compilada, ela não retornará mais a mensagem original.

Um exemplo comum é quando você deseja comparar a senha de um determinado usuário com uma que esteja salva em banco de dados. Você não precisa descriptografar a senha do banco para saber se ela é idêntica à informada pelo usuário. Basta criptografar ambas com o mesmo algoritmo hash para saber se são idênticas.

Visto todos esses conceitos, está na hora de por a mão na massa. Primeira coisa a fazer é baixar e instalar o Enterprise Library (ver links acima e os helps disponibilizados pela própria Microsoft).

  1. Vamos começar. Abra o Enterprise Library Configuration, pela instalação padrão fica em Microsoft patterns & practices » Enterprise Library.
  2. Crie uma nova aplicação e nomeie-a conforme desejar.
     
  3. Com o botão direito clique na sua aplicação, neste caso Application1, depois passe o mouse sobre "New" e por último clique em "Cryptography Application Block".
     
  4. Com o Cryptography Application Block criado, vamos criar o nosso provedor de Hash. Clique com o botão direito em Hash Provider, passe o mouse sobre "New" e clique em "HashAlgorithm Provider".
     
  5. Na tela que abre em decorrência dessa ação, escolha o provedor que melhor irá lhe servir. No caso irei utilizar o SHA1Managed.
     
  6. De um nome para o seu provedor, no meu caso utilizei MeuHash.
     
  7. Para criar a criptografia simétrica faça o seguinte conjunto de instruções. Clique com o botão direito sobre Symmetric Providers, vá em New e Clique em "Symmetric AlgoithmProvider".
     
  8.  
  9. Na tela que abre em decorrência dessa ação, escolha o provedor que melhor irá lhe servir. No caso irei utilizar o RC2CryptoServiceProvider.
     
  10. Antes de qualquer coisa faça um backup do web.config do seu projeto ASP.Net lembre-se backup nunca é demais. Salve a sua aplicação Enterprise Library com o nome de web.config na pasta raiz do seu projeto ASP.Net. Com isso você também criará um arquivo chamado securityCryptographyConfiguration.config.

Pronto, você já pode fechar a Enterprise Library.

  1. Abra a sua solução no Visual Studio .Net.
  2. Adicione duas referências ao seu projeto, uma é a Microsoft.Practices.EnterpriseLibrary.Security e a outra é Microsoft.Practices.EnterpriseLibrary.Configuration. Ambas podem ser encontradas em C:\Arquivos de programas\Microsoft Enterprise Library\bin\, no caso de você ter utilizado a instalação padrão.
  3. Vamos agora criar uma página básica para testar a criptografia e descriptografia da nossa aplicação.
  4. A página poderá ficar mais ou menos parecida com essa. Não é bonita, mas vai servir por enquanto.

Visto isso, vamos adicionar os códigos necessários.

  1. Faça o import da Microsoft.Practices.EnterpriseLibrary.Security.Cryptography. Para isso, utilize o comando:
    Imports Microsoft.Practices.EnterpriseLibrary.Security.Cryptography
     
  2. Na criptografia simétrica
  3. No botão Criptografar, utilize o seguinte código:
     
  4. Private Sub btnCriptografar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCriptografar.Click
        Me.txtCriptografado.Text = Cryptographer.EncryptSymmetric("MeuSymmetricProvider", Me.txtDescriptografado.Text)
    End Sub
     

  5. No botão Descriptografar, utilize o seguinte código:

  6. Private Sub btnDescriptografar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDescriptografar.Click
        Me.txtDescriptografado.Text = Cryptographer.DecryptSymmetric("MeuSymmetricProvider", Me.txtCriptografado.Text)
    End Sub
     

  7. No Hash
  8. No botão gerar Hash, vamos utilizar este "complexo" comando.
     
  9. Private Sub btnGerarHash_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGerarHash.Click
        Me.txtHashGerado.Text = Cryptographer.CreateHash("MeuHash", Me.txtTextoPuro.Text)
    End Sub
     

  10. No botão Comparar Hash, basta essas poucas linhas.
     
  11. Private Sub btnCompararHashs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCompararHash.Click
        If Cryptographer.CompareHash("MeuHash", Me.txtTextoPuro.Text, Me.txtHashGerado.Text) Then
            Me.lblResultadoComparacao.Text = "Hashs são idênticos"
        Else
            Me.lblResultadoComparacao.Text = "Hashs são diferentes"
        End If
    End Sub

Agora brinque a vontade com a suas criptografias e aproveite para explorar o Enterprise Library.