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 FilhoAntes 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).
- Vamos começar. Abra o Enterprise Library Configuration, pela instalação padrão fica em Microsoft patterns & practices " Enterprise Library.
- Crie uma nova aplicação e nomeie-a conforme desejar.
- 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".
- 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".
- Na tela que abre em decorrência dessa ação, escolha o provedor que melhor irá lhe servir. No caso irei utilizar o SHA1Managed.
- De um nome para o seu provedor, no meu caso utilizei MeuHash.
- 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".
- Na tela que abre em decorrência dessa ação, escolha o provedor que melhor irá lhe servir. No caso irei utilizar o RC2CryptoServiceProvider.
- 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.
- Abra a sua solução no Visual Studio .Net.
- 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.
- Vamos agora criar uma página básica para testar a criptografia e descriptografia da nossa aplicação.
- 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.
- 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
- 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
- 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
- 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
- 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.