quarta-feira, 3 de outubro de 2007

Mais um pouco de .NET

É, já faz tempo que não posto nada. Trabalho, faculdade, não é fácil. Parece que o dia fica cada vez mais curto. Mas, é a vida! :)

Que tal mais um pouco de VB.NET???

Então vamos lá!!

Criptografia de senhas

Eu ainda não tenho muita intimidade com .NET, mesmo porque mexo com ele há muito pouco tempo. Mesmo assim, posso mostrar um pouco do que estou aprendendo.

Estava em uma aula da faculdade fazendo parte de um trabalho. Comecei a tentar, através de algumas dicas pela internet, a fazer criptografia com MD5 em Java.

Funcionou que é uma beleza, só preciso passar pra uma classe, etc, etc...

Chegando em casa no mesmo dia, resolvi tentar fazer a mesma coisa e VB.NET, pra minha decepção, não consegui fazer logo de primeira. Também segui algumas dicas pela internet, mas nem assim me ajudaram...

Vamos ao código.

Primeiro vou mostrar o código da função para encriptar a senha:

Shared Function encriptaSenha(ByVal senhaPlana As String) _
As String

'Declaração da variável que possui os algoritmos _
'de criptografia

Dim md5 As New _
Security.Cryptography.MD5CryptoServiceProvider

'Declaração da variável para acesso aos bytes do _
'texto digitado

Dim A2 As New _
System.Text.ASCIIEncoding

'A função getBytes transforma as letras para a sua _
'representação em bytes

Dim bytes() As Byte = _
A2.GetBytes(senhaPlana)

'ComputeHash finalmente faz a criptografia e retorna _
'um array de bytes criptografados. Então, precisamos _
'de uma função para deixar isso mais "legível", _
'a toHex.

Return toHex(md5.ComputeHash(bytes))

End Function



A função toHex tem como entrada os bytes computados pelo ComputeHash do MD5. Então precisamos converter para hexadecimal, para que o armazenamento seja mais trivial.
Shared Function toHex(ByVal bytes() As Byte) As String
'String com todos os dígitos da base hexadecimal
Dim hexDigits As String = "0123456789abcdef"

Dim retorno As String = ""
'Para cada byte no vetor de bytes o looping abaixo _
'realiza a seguinte tarefa:
'Concatena com a string retorno o caractere que se _
'encontra na posição X e Y da string hexDigits, _
'onde X é a parte inteira da divisão de cada byte _
'por 16 (base hexadecimal) e Y é o resto da divisão _
'inteira entre cada byte por 16.

For Each bt As Byte In bytes
retorno &= hexDigits.ToCharArray.GetValue _
(CInt(Int(bt / 16))).ToString()
retorno &= hexDigits.ToCharArray.GetValue _
(CInt(Int(bt Mod 16))).ToString()
Next

Return retorno

End Function


Resumindo:

Devemos declarar uma variável como Security.Cryptography.MD5CryptoServiceProvider para calcular o hash (sequência de 16 bytes) que representa a string original criptografada.

Depois utilizamos a função toHex para converter o hash para a base hexadecimal.

Simples, rápido, fácil e ótimo para criptografar senhas!

Por enquanto é só, até a próxima!