jueves, 24 de julio de 2008

Convertir una cadena de caracteres ascii en una cadena de caracteres hexadecimales

Aquí expongo un código que convierte una cadena de caracteres ascii en una cadena de valores hexadecimales, puede servir para varias cosas, especialmente para encriptar el QueryString. Está escrito en VB.Net, para .NET Framework 2.0

Archivo Encrypt.vb en el proyecto (carpeta App_Code)
---------------------------------------------------------------------
Namespace Encrypt

Public Class EncryptionHexa

Public Shared Function Encrypt(ByVal _data As String) As String
Dim _hex As String = String.Empty
Dim _bytes As Byte() = ASCIIEncoding.ASCII.GetBytes(_data)
For Each _byte As Byte In _bytes
_hex &= Hex(_byte)
Next
Return (_hex)
End Function

Public Shared Function Decrypt(ByVal _data As String) As String
Dim _char As String = String.Empty
For i As Int16 = 0 To _data.Length - 1 Step 2
_char &= Chr(Convert.ToInt16(_data.Substring(i, 2), 16))
Next
Return (_char)
End Function

End Class

End Namespace
---------------------------------------------------------------------

Archivo Default1.aspx (con botón para redireccionar a otra página enviando un querystring encriptado)
---------------------------------------------------------------------
<asp:Button ID="buttonEnviar" runat="server" text="Enviar" />

---------------------------------------------------------------------

Archivo Default1.aspx.vb (codebehind)
---------------------------------------------------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim _url As String = "nombre=OSVALDO&apellido=SAN MARTIN"
Dim _urlEnc As String = Encrypt.EncryptionHexa.Encrypt(_url)
Me.buttonEnviar.OnClientClick = "window.location.href='Default2.aspx?" & _urlEnc & "'; return(false);"
'Me.buttonEnviar.OnClientClick = "window.location.href='Default2.aspx?c=" & _urlEnc & "'; return(false);"
End Sub



Archivo Default2.aspx.vb
---------------------------------------------------------------------
'si se usa ?XXX

Dim _urlEnc As String = Request.Url.Query
_urlEnc = _urlEnc.Substring(1, _urlEnc.Length - 1)
'_urlEnc = Right(_urlEnc, _urlEnc.Length - 1)

'si se usa ?c=XXX
'Dim _urlEnc As String = Request.QueryString("c")

'desencriptar
Dim _url As String = Encrypt.EncryptionHexa.Decrypt(_urlEnc)
'obtener los valores

Dim _querystring As New System.Collections.Specialized.NameValueCollection
_querystring = System.Web.HttpUtility.ParseQueryString(_url)
Response.Write("nombre = " & _querystring("nombre"))
Response.Write("apellido = " & _querystring("apellido"))


Para .Net Framework 1.1 se debe reemplazar la línea:
_querystring = System.Web.HttpUtility.ParseQueryString(_url)

por la siguiente:
Dim _parts As String() = _url.Split("&")
For Each _part As String In _parts
_querystring.Add(_part.Split("=")(0), _part.Split("=")(1))
Next