post icon

Diviertete encriptando tus passwords con .NET

Buenas, me presento, soy Solid Snake, si el mismo de Metal Gear Solid, me fuerzan a colaborar con simplesmortales algunas tonterias que tengo en la laptop estos desgraciados de Philanthropy…

Aqui les presento un wrapper que estoy usando para encapsular metodos de criptografia que utilizo para encriptar passwords de paginas web simples, solo usa los metodos para guardar la contraseña en tu DBMS, luego cuando se ingresa haz que tu form de login tome lo que ingrese, encriptas de la misma manera y comparas, eso no falla. Sin mas el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Imports System
Imports System.Security.Cryptography
Imports System.Text
 
' Clase que engloba metodos de criptografia para guardar tus passwords :P
 
' Puedes implementar tus metodos de criptografia y extender tu clase a gusto :)
Public Class Cryptografia
 
	' Encripta una cadena de texto usando el algoritmo de encriptacion de hash MD5.
	' el "Message Digest" es una encriptacion de 128-bit y es usado comunmente para
	' verificar datos chequeando el "Checksum MD5", mas informacion se puede
	' encontrar en: http://www.faqs.org/rfcs/rfc1321.html
	'
 
	' cadena conteniendo el string a hashear a MD5.
	' Una cadena de texto conteniendo en forma encriptada la cadena ingresada.
	Public Shared Function MD5Hash(ByVal Data As String) As String
		Dim md5 As MD5 = New MD5CryptoServiceProvider()
		Dim hash As Byte() = md5.ComputeHash(Encoding.UTF8.GetBytes(Data))
 
		Dim stringBuilder As New StringBuilder()
 
		For Each b As Byte In hash
			stringBuilder.AppendFormat("{0:x2}", b)
		Next
		Return stringBuilder.ToString()
	End Function
 
	' Encripta una cadena utilizando el algoritmo SHA256 (Secure Hash Algorithm)
	' Detalles: http://www.itl.nist.gov/fipspubs/fip180-1.htm
	' Esto trabaja de misma manera que el MD5, solo que utilizando una
	' encriptacion en 256 bits.
 
	' Un string conteniendo los datos a encriptar.
	' Un string conteniendo al string de entrada, encriptado con el algoritmo SHA256.
	Public Shared Function SHA256Hash(ByVal Data As String) As String
		Dim sha As SHA256 = New SHA256Managed()
		Dim hash As Byte() = sha.ComputeHash(Encoding.UTF8.GetBytes(Data))
 
		Dim stringBuilder As New StringBuilder()
		For Each b As Byte In hash
			stringBuilder.AppendFormat("{0:x2}", b)
		Next
		Return stringBuilder.ToString()
	End Function
 
	' Encripta una cadena utilizando el algoritmo SHA256 (Secure Hash Algorithm)
	' Detalles: http://www.itl.nist.gov/fipspubs/fip180-1.htm
	' Esto trabaja de misma manera que el MD5, solo que utilizando una
	' encriptacion en 256bits.
 
	' Un string conteniendo los datos a encriptar.
	' Un string conteniendo al string de entrada, encriptado con el algoritmo SHA384.
	Public Shared Function SHA384Hash(ByVal Data As String) As String
		Dim sha As SHA384 = New SHA384Managed()
		Dim hash As Byte() = sha.ComputeHash(Encoding.UTF8.GetBytes(Data))
 
		Dim stringBuilder As New StringBuilder()
		For Each b As Byte In hash
			stringBuilder.AppendFormat("{0:x2}", b)
		Next
		Return stringBuilder.ToString()
	End Function
 
	' Encripta una cadena utilizando el algoritmo SHA256 (Secure Hash Algorithm)
	' Detalles: http://www.itl.nist.gov/fipspubs/fip180-1.htm
	' Esto trabaja de misma manera que el MD5, solo que utilizando una
	' encriptacion en 512 bits.
 
	' Un string conteniendo los datos a encriptar.
	' Un string conteniendo al string de entrada, encriptado con el algoritmo SHA512.
	Public Shared Function SHA512Hash(ByVal Data As String) As String
		Dim sha As SHA512 = New SHA512Managed()
		Dim hash As Byte() = sha.ComputeHash(Encoding.UTF8.GetBytes(Data))
 
		Dim stringBuilder As New StringBuilder()
		For Each b As Byte In hash
			stringBuilder.AppendFormat("{0:x2}", b)
		Next
		Return stringBuilder.ToString()
	End Function
End Class

Nota: Cabe recordar que todos estos algoritmos de encriptado solo obtienen un hash del string original, y no es reversible. Por lo tanto si lo que buscas es luego desencriptar esto debes utilizar otros algoritmos, por ello también hace que éstos sean más seguros al no poder hacer el reverso 🙂

Comentarios desde Facebook:

  1. avatar
    DAM Syndicate SPAIN Google Chrome Windows
    11 octubre 2012 at 15:49 #

    Estupendo.

  2. avatar
    hegaes MEXICO Internet Explorer Windows
    4 septiembre 2010 at 13:06 #

    Excelente aporte, gracias por compartir, será de gran utilidad

  3. avatar
    SolidSnake PARAGUAY Google Chrome Windows
    25 junio 2010 at 17:44 #

    Gracias GeekZero por la correcion y la Nota 🙂

    No pude seguir editando porque ya me llevaron a tomar cerveza, juajaujajuajua 🙂

  4. avatar
    GeekZero Google Chrome Windows
    25 junio 2010 at 15:03 #

    Super! ahi esta con mas facha ya.. en el modo HTML se usan los tags para pintar el codigo 😛 Por ahi tenia uno en C# con Rijndael, uno de estos dias lo subo 🙂

Trackbacks/Pingbacks

  1. Como encriptar y desencriptar con Rijndael (AES) en dotNet | DevTroce.com WordPress - 24 enero 2011

    […] y desencriptar con Rijndael (AES) en dotNet Ya anteriormente veíamos como encriptar sacando el hash a los textos (los cuales no tienen reversión de los mismos). Esta vez veremos como encriptar los textos y […]

Responder