Encriptación: Una clase que te puede simplificar las cosas

‘Este código que hoy os mando es fue desarrollado por mí y el amigo Elliott (dev4u.net@gmail.com) he dividido el trabajo de los 2 en Regiones, mi parte del trabajo es la región Contraseñas Hash y la de Elliott Encriptar/Desencriptar, yo comentaré mi parte, si tenéis alguna duda con su código contactad con él, o contactad conmigo para que os ponga en contacto con él.


 


‘Antes de que me olvide otra cosa, fue desarrollado con Visual Studio 2005, pero no tiene ningún problema en ser usado con Visual Studio .NET 2003 (a mi no me dio ningún conflicto).


 


Imports System


Imports System.IO


Imports System.Security


Imports System.Security.Cryptography


Imports System.Text


 


Public Class Criptologia



#Region «Contraseñas Hash»



    ‘Con esta función que tenemos aquí abajo, lo que haces es transformar la cadena en Bytes.


    Shared Function ConvertirCadenaEnMatrizDeTipoByte(ByVal Cadena As [String]) As [Byte]()


        Return (New UnicodeEncoding).GetBytes(Cadena)


        ‘Retornamos la cadena convertida.


    End Function



    ‘En esta función la cadena la convertiremos en Bytes con la función anterior, lo transformaremos en un valor Hash, encriptado con el algoritmo SHA512 y más tarde lo convertiremos en una cadena.



    Public Function EncriptarHash(ByVal ValorAEncriptar As String) As String


        Dim ValorToHash As [Byte]() = ConvertirCadenaEnMatrizDeTipoByte(ValorAEncriptar)


        ‘Declaramos la variable de tipo Byte y llamamos a ConvertirCadenaEnMatrizDeTipoByte y convertimos la cadena a encriptar en typo Byte


        Dim ValorHash As Byte() = CType(CryptoConfig.CreateFromName(«SHA512»), HashAlgorithm).ComputeHash(ValorToHash)


        ‘Encriptamos variable Byte en una cadena de tipo Byte, también.


        Return Convert.ToBase64String(ValorHash)


        ‘BitConverter.ToString(ValorHash)


        ‘Retornamos la variable de tipo Byte en String.


    End Function



    ‘Para comparar dos valores lo primero es enviar como parametros una cadena sin encriptar y otra cadena encriptada, con el mismo tipo de encriptación, y haciendo uso del mismo algoritmo, en nuestro caso usaremos Hash con el algoritmo SHA512. Luego encriptamos el valor si encriptar y comparamos los dos valores, retornando True si son iguales y False si son diferentes, esto lo podemos hacer con una simple sentencia IF.


    Public Function Comparar(ByVal ValorSinEncriptar As String, ByVal ValorEncriptado As String) As Boolean


        If EncriptarHash(ValorSinEncriptar) = ValorEncriptado Then


            Return True


        Else


            Return False


        End If


    End Function


#End Region


 


#Region «Encriptar/Desencriptar»


    Const StrClave As String = «EjemploDeCodigo»


    Public Function EncriptarTexto(ByVal CadenaAEncriptar As String, Optional ByVal Clave As String = StrClave, Optional ByVal MantenerMayusculas As Boolean = True)


        Dim i As Integer, C As Integer


        Dim CadenaEncriptada As String


        If MantenerMayusculas = False Then


            Clave = Clave.ToUpper()


            CadenaAEncriptar = CadenaAEncriptar.ToUpper()


        End If


        If Len(Clave) Then


            For i = 1 To Len(CadenaAEncriptar)


                C = Asc(Mid$(CadenaAEncriptar, i, 1))


                C = C + Asc(Mid$(Clave, (i Mod Len(Clave)) + 1, 1))


                CadenaEncriptada = CadenaEncriptada & Chr(C And &HFF)


            Next i


        Else


            CadenaEncriptada = CadenaAEncriptar


        End If


        Return CadenaEncriptada


    End Function


 


    Public Function DesencriptarTexto(ByVal CadenaADesencriptar As String, Optional ByVal Clave As String = StrClave, Optional ByVal MantenerMayusculas As Boolean = True)


        Dim i As Integer, C As Integer


        Dim CadenaDesencriptada As String


        If MantenerMayusculas = False Then


            Clave = Clave.ToUpper


        End If


        If Len(Clave) Then


            For i = 1 To Len(CadenaADesencriptar)


                C = Asc(Mid$(CadenaADesencriptar, i, 1))


                C = C – Asc(Mid$(Clave, (i Mod Len(Clave)) + 1, 1))


                CadenaDesencriptada += Chr(C And &HFF)


            Next i


        Else


            CadenaDesencriptada = CadenaADesencriptar


        End If


        Return CadenaDesencriptada


    End Function


#End Region


End Class

El bucle While (Mientras que)



Bueno, hoy por la mañana (17/05/2006), abrí correo y me encontre con un correo de estudiante de ingeniería civil en colombia, en el cual me decía que no entendia el ciclo mientras que (While) y me pedía si podía ayudarle con él. Bueno, pues aquí tenéis mi respuesta (os copio el email tal cual):


Bueno, pues claro que tienes mi ayuda. A ver, te refieres al bucle While. Pues te voy poner un ejemplo para que lo entiendas*.

Dim n As Integer = 1
Dim Cadena As String = «»
Do While n <= 10
cadena += n
n += 1
Loop

Ahora me preguntarás que qué hace ese código, pues bien, primero declaramos unas variables, n de tipo entero (Integer), y cadena de tipo cadena (String). Luego creamos el bucle:

Do While n <= 10

Loop

¿Qué significa? Pues bien que el código que se encuentre dentro del bucle (ahora las líneas en blanco) se va a ejecutar mientras n sea menor o igual a 10. Luego dentro incluiremos una concatenación de caracteres:

cadena += n

Y luego modificaremos n:

n += 1

Te preguntarás para qué modificamos n pues bien, si nosotros tenemos un bucle (repetición de sentencias) con una condicional (que n sea menor o igual a 10) si no modificamos n nunca será mayor que 10 para que se termine el bucle, ¿no crees? Bien, ahora bien, cuál será el resultado de este código, pues que cadena contenga la siguiente cadena: 12345678910. Una ultima cosa en la condicional si ponemos algo así:

Do While 1 = 1

Loop

¿Qué pasará? Pues que el código que lo contiene se ejecutará siempre. Así que ten cuidado. Bueno y otra cosa más. Podemos salir del bucle con una sentencia:

Exit While

Un saludo, y espero que lo entendieses, espero tus comentarios:D

*Este código lo hice con la versión 2005 Express Edition, gratuita.


Pues esto es todo, saludos.

C# un lenguaje desconocido para muchos



Desde la primera versión de .NET nos encontramos con un lenguaje nuevo en las tecnologías de microsoft. Se trata del C# (CSharp o CS). Es un lenguaje, que como muchos, viene derivado del C, otros lenguajes, muy conocidos, derivados de C son:


  • C++ (o Cpp): Es la versión orientada a objetos de C. Podemos encontrar dos versiones más importantes. La de Borland y la de Microsoft (compatible con .NET). Se puede decir que el cpp de Borland (ya que no usa el .NET Framework) es uno de los lenguajes más potentes. Pero también uno de los que más tiempo necesitarás para su aprendizaje y para tus desarrollos.
  • Java: Es un derivado de C de las manos de Sun Microsystems, actualmente su última versión es J2EE, usa un maquina virtual para ejecutar sus aplicaciones.

C# es uno de los lenguajes más usados de .NET junto con Visual Basic. Según diversas fuentes, un derivado de C# es el que utiliza la propia Microsoft para sus desarrollos. Aún no hace muchos meses conocíamos una noticia de que Microsoft estaba desarrollando un sistema operativo con C# simplemente por razones experimentales (no comerciales). Para su desarrollo usaron una mezcla de C# y Sing#, que es un derivado de Spec# (otro derivado de C#)*.


Como podéis ver C# tiene futuro, y además tiene una sintaxys que deja que envidiar a lenguajes como Visual Basic. Su sintaxys, no solo le deja rienda suelta al programador en cuanto a la extensión de las lineas, sino que puedes escribir varias sentencias en una misma linea. Por ejemplo:


string Cadena1 = «Cadena1»;
Cadena1 = «Texto1»;


Eso es lo mismo a:


string Cadena1 = «Cadena1»; Cadena1 = «Texto1»;


Como podéis ver podemos hacer uso del lenguaje como más cómodo nos sea.


Bueno, ya sabéis si usáis .NET, C# es una buena opción para programar.




*Noticia completa en VBPrincipiantes:
http://www.vbprincipiantes.com/Noticias.aspx?id=5