mayo 2006
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
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, 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
- 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