Desenvolvimento - ASP. NET

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

Você algum dia já precisou utilizar algum tipo de criptografia em um site que você desenvolveu. Agora, a Microsoft criou a Enterprise Library.

por 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.

  1. 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".

  2. 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".

  3. Na tela que abre em decorrência dessa ação, escolha o provedor que melhor irá lhe servir. No caso irei utilizar o SHA1Managed.

  4. De um nome para o seu provedor, no meu caso utilizei MeuHash.

  5. 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".

  1. Na tela que abre em decorrência dessa ação, escolha o provedor que melhor irá lhe servir. No caso irei utilizar o RC2CryptoServiceProvider.

  2. 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
    

    Na criptografia simétrica

  2. No botão Criptografar, utilize o seguinte código:
        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
    

  3. No botão Descriptografar, utilize o seguinte código:
        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
    

    No Hash

  4. No botão gerar Hash, vamos utilizar este "complexo" comando.
        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
    

  5. No botão Comparar Hash, basta essas poucas linhas.
        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.

Avelino Ferreira Gomes Filho

Avelino Ferreira Gomes Filho