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).
Pronto, você já pode fechar a Enterprise Library.
Visto isso, vamos adicionar os códigos necessários.
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
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
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
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.