Foros del Web » Programación para mayores de 30 ;) » .NET »

Variables URL Cifradas

Estas en el tema de Variables URL Cifradas en el foro de .NET en Foros del Web. Hola gente del foro. Necesito cifrar las variables URL que viajan de una página a otra. Alguien me puede ayudar con esto??? Gracias de antemano......
  #1 (permalink)  
Antiguo 28/03/2005, 11:07
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
Variables URL Cifradas

Hola gente del foro.

Necesito cifrar las variables URL que viajan de una página a otra.

Alguien me puede ayudar con esto???


Gracias de antemano...
  #2 (permalink)  
Antiguo 28/03/2005, 12:21
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Aqui podrás encontrar un algoritmo simétrico con un key asingnado por tí que usaras para pasar tu cadena por querystring.

http://www.codeproject.com/aspnet/encrypt.asp

Simple y sencillo de implementar.

Prueba y si tienes duas te echamos un cable..

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 28/03/2005, 13:40
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
Se lo ve bien. Pero podrías ayudarme con un ejemplo en C sharp????

Gracias
  #4 (permalink)  
Antiguo 28/03/2005, 13:49
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
No es dificil pasarlo a c#.. en que parte tienes problemas..??
  #5 (permalink)  
Antiguo 28/03/2005, 14:09
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
Asi lo estaba convirtiendo. Salen algunos errores..

A ver si me hechas una mano..
Código PHP:

public static string Encrypt(string strText,string  strEncrKey)
        {
                
byte byKey;
                
                
byte[] IV={&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF};

                
//des=new ds
            
try
            {
                
//byKey = System.Text.Encoding.UTF8.GetBytes(Left(strEncrKey, 8));
                
byKey System.Text.Encoding.UTF8.GetBytes(strEncrKey.Substring(0,8));
                
DESCryptoServiceProvider des= new DESCryptoServiceProvider();
                
//Dim des As New DESCryptoServiceProvider()
                
byte inputByteArray=Encoding.UTF8.GetBytes(strText);
                
//Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(strText)
                //ms=new Memo
                
MemoryStream ms=new MemoryStream();
                
//Dim ms As New MemoryStream()
                
CryptoStream cs=new CryptoStream(ms,des.CreateDecryptor(byKey,IV),
                    
CryptoStreamMode.Write);
                
//cs.
                //Dim cs As New CryptoStream(ms, des.CreateEncryptor(byKey, IV),_
                
cs.Write(inputByteArray,0,inputByteArray.ToString().Length);
                
cs.FlushFinalBlock();
                
                return 
Convert.ToBase64String(ms.ToArray());

            }
            catch(
Exception ex)
            {
                return 
ex.Message.ToString();
            }
        }
        public static 
string Decrypt(string strText,string sDecrKey)
        {
            
byte byKey;
            
byte[] IV={&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF};
        
            
byte inputByteArray;
            
inputByteArray(strText.Length);
            try
            {
                
byKey=System.Text.Encoding.UTF8.GetBytes(sDecrKey.Substring(0,8));
                
DESCryptoServiceProvider des=new DESCryptoServiceProvider();
                
                
inputByteArray=Convert.FromBase64String(strText);
                
//Dim ms As New MemoryStream()
                
MemoryStream ms=new MemoryStream();
                
CryptoStream cs=new CryptoStream(ms,des.CreateDecryptor(byKey,IV),
                    
CryptoStreamMode.Write);
                
//Dim cs As New CryptoStream(ms, des.CreateDecryptor(byKey,_ 
                //IV), CryptoStreamMode.Write)
 
                //cs.Write(inputByteArray, 0, inputByteArray.Length)
                
cs.Write(inputByteArray,0,inputByteArray.ToString().Length);
                
cs.FlushFinalBlock();
                
//cs.FlushFinalBlock()
                
System.Text.Encoding encoding=new System.Text.UTF8Encoding();
                
//Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8       
                //Return encoding.GetString(ms.ToArray())
                
return encoding.GetString(ms.ToArray());
            }
            catch(
Exception ex)
            {
                return 
ex.Message.ToString();
            }
       } 
  #6 (permalink)  
Antiguo 29/03/2005, 16:03
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
RootK alguna ayuda please.......

O algun convertidor de codigo VB.NET a C sharp???


Gracias de antemano.
  #7 (permalink)  
Antiguo 29/03/2005, 16:41
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
De hecho en las faq´s puse un convertidor de vb.net c c# y viceversa..

En cuanto a tu code.. para empezar en c# los bytes se representan de diferente forma ..(&H12 = 0x12..etc)

así sería el code para el encriptamiento:

Código PHP:
public static string Encrypt(string strTextstring strEncrKey)
        {
            
byte[] byKey = new byte[] {};
            
byte[] IV  = new byte[] {0x010x020x030x040x050x060x070x080x090x100x110x120x130x140x150x16};

            try
            {
                
byKey  System.Text.Encoding.UTF8.GetBytes(strEncrKey.Substring(08));
                
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                
byte[] inputByteArray Encoding.UTF8.GetBytes(strText);
                
MemoryStream ms = new MemoryStream();
                
CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(byKey,IV),
                    
CryptoStreamMode.Write);
                
cs.Write(inputByteArray0inputByteArray.Length);
                
cs.FlushFinalBlock();

                return 
Convert.ToBase64String(ms.ToArray());
            }
            catch (
Exception ex)
            {
                return 
ex.Message.ToString();
            }        
        } 
Y creo que con este ejemplo podrás hacerlo para desencriptar..

Espero te sirva..
  #8 (permalink)  
Antiguo 01/04/2005, 15:41
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
Gracias RootK. Me funcionó perfectamente.


Pero tengo otra duda. Resulta que yo utilizo Hiperlink Column y en el Format String. Pongo lo siguiente.....

AgrClinicaDet.aspx?id={0}&modo=C

Como puedo hacer para que esto vaya cifrado????


Gracias de antemano.
  #9 (permalink)  
Antiguo 01/04/2005, 16:58
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Hacerlo directamente con hyperlink column no es posible.. pero si puedes usar un templatecolunm con un hyper link haciendolo de ésta forma:

Cita:
<asp:TemplateColumn>
<ItemTemplate>
<asp:HyperLink Runat=server NavigateUrl='<%# EncryptString((string)DataBinder.Eval(Container.DataItem,"tu_campo")) %>' ID="hyperLink1">
Algun Texto
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateColumn>
y en tu codebehin.. declarar un método de tipo protected para llamar la funcion de encriptamiento:


Cita:

protected string EncryptString(string s)
{
return Encrypt(s,"!#c38?3$");


}
Creo que eso es lo que buscas no..??

Salu2
  #10 (permalink)  
Antiguo 04/04/2005, 10:42
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
Ya lo pude resolver....
En en evento ItemCommand puse lo siguiente....

Código PHP:
string idurl,modo ;
            if (
e.CommandName.Equals ("Consultar"))
            {
                
id e.Item.Cells[1].Text.Trim();
                
modo=FuncGenerales.Encrypt("C","&%#@?,:*");
                
url="AgrClinicaDet.aspx?id="+id " &modo=" modo;
                
Response.Redirect (url);
            }
            if (
e.CommandName.Equals ("Modificar"))
            {
                
id e.Item.Cells[1].Text.Trim();
                
modo=FuncGenerales.Encrypt("M","&%#@?,:*");
                
url="AgrClinicaDet.aspx?id="+id "&modo=" modo;
                
Response.Redirect (url);
            }
            if (
e.CommandName.Equals ("Eliminar"))
            {
                
id e.Item.Cells[1].Text.Trim();
                
modo=FuncGenerales.Encrypt("E","&%#@?,:*");
                
url="AgrClinicaDet.aspx?id="+id "&modo=" modo;
                
Response.Redirect (url);
            } 
Y la columna 1 del DataGrid está el código encriptado.

Pero me di cuenta que el método de encriptación no funciona bien. En ciertos códigos se cae y Devuelve un error. (Por ejemplo con el código 00002)
Pensé que tenia algun error cuando lo cambie de VB.NET a C sharp. Pero no es así. Puesto que en la misma URL que me diste

http://www.codeproject.com/aspnet/encrypt.asp

Existe el mismo código pero en C sharp. Use ese código y también se cae.
Da un error de Invalid length for a Base-64 char array.
Justo en esta línea
Byte[] inputByteArray = inputByteArray = Convert.FromBase64String(strText);

Tendré que buscar algun otro método de encriptación......

Saludos
  #11 (permalink)  
Antiguo 04/04/2005, 10:52
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Ahh..ok.. lo que pasa es que a veces genera un espacio dentro del encriptamiento, pero para evitar ese problema haz lo siguiente antes de que desencriptes:


Cita:
protected string EncryptString(string s)
{
s = s.Replace(" ","+");
return Encrypt(s,"!#c38?3$");
}
Si te fijas estoy reemplazando los espacios por el signo de "+"

Creo que con eso queda solucionado.

Cualquier cosa por aqui seguimos...

Salu2
  #12 (permalink)  
Antiguo 04/04/2005, 11:37
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
Si me habia dado cuenta de eso. Estaba probando haciendo un Trim(), pero no funcionaba.

Ahora estoy probando lo que me dijiste pero no funciona.

Justo antes de desencriptar hice lo siguiente.

string valor=Request.QueryString["id"].Replace(" ","+");
id=FuncGenerales.Decrypt(valor,"&%#@?,:*");

Pero me da el mismo error.....


Que puedo hacer?????
  #13 (permalink)  
Antiguo 04/04/2005, 11:59
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 10 meses
Puntos: 7
Prueba intentando aplicar UrlEncode luego de aplicar el método Encrypt ya que probablemente produzcan caracteres que no son enviados correctamente por el navegador.

http://msdn.microsoft.com/library/default.asp?
url=/library/en-us/cpref/html/frlrfsystemwebhttpserverutilitymemberstopic.asp

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #14 (permalink)  
Antiguo 04/04/2005, 15:38
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
RootK alguna sugerencia?????


  #15 (permalink)  
Antiguo 05/04/2005, 12:54
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
O si de pronto alguien tiene un método de Encriptación y Desencriptación sencillo. Les agradecería muchísimo....
  #16 (permalink)  
Antiguo 06/04/2005, 08:01
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Cual es el metodo completo que estás usando para encriptar, que key estas usando y cual es la cadena a la que le quieres aplicar el encriptamiento.. ??

Pon esos datos para echarle un ojo y ver que es lo que puede estar pasando porque es la forma en que yo lo hago y hasta ahorita no he tenido problemas.

Salu2
  #17 (permalink)  
Antiguo 06/04/2005, 10:22
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
Con este código cargo en DataGrid....

Código PHP:

SqlConnection conn 
= new SqlConnection(conexion);
            
            
sql=         " SELECT coClinica,txClinica ";
            
sql=sql " FROM ";
            
sql=sql " tblClClinica ";
            
sql=sql " WHERE  1=1 " Session["criterio"].ToString();
            
sql=sql " order by 1 ";
            
            
SqlDataAdapter daBusqueda = new SqlDataAdapter(sqlconn);
            
DataSet ds = new DataSet();
            
daBusqueda.Fill(ds"tblClClinica");

            
this.dtgClinicas.CurrentPageIndex=0;

            
ds.Tables[0].Columns.Add("coCliEnc");
            
DataTable tblRecorre;
            
tblRecorre ds.Tables[0];
            foreach(
DataRow dr    in tblRecorre.Rows)
            {
                
dr["coCliEnc"]=FuncGenerales.Encrypt(dr["coClinica"].ToString(),"&%#@?,:*");
            }
            
this.dtgClinicas.DataSource ds;
            
this.dtgClinicas.DataBind();
            
Session["ds"]=ds
Si te das cuenta la llave es..... "&%#@?,:*"

Y asi lo envio hacia la otra página en el evento ItemCommand

Código PHP:

string id
url,modo ;
            if (
e.CommandName.Equals ("Consultar"))
            {
                
id e.Item.Cells[1].Text.Trim();
                
modo=FuncGenerales.Encrypt("C","&%#@?,:*");
                
url="AgrClinicaDet.aspx?id="+id " &modo=" modo;
                
Response.Redirect (url);
            }
            if (
e.CommandName.Equals ("Modificar"))
            {
                
id e.Item.Cells[1].Text.Trim();
                
modo=FuncGenerales.Encrypt("M","&%#@?,:*");
                
url="AgrClinicaDet.aspx?id="+id "&modo=" modo;
                
Response.Redirect (url);
            }
            if (
e.CommandName.Equals ("Eliminar"))
            {
                
id e.Item.Cells[1].Text.Trim();
                
modo=FuncGenerales.Encrypt("E","&%#@?,:*");
                
url="AgrClinicaDet.aspx?id="+id "&modo=" modo;
                
Response.Redirect (url);
            } 
Y de esta forma lo desencripto en la página destino....
Código PHP:

Session
["modo"]=FuncGenerales.Decrypt(Request.QueryString["modo"],"&%#@?,:*");
                
id=FuncGenerales.Decrypt(Request.QueryString["id"],"&%#@?,:*"); 
Los métodos de encriptación y Desencriptación Los detallo a continuación

Código PHP:
public static String Encrypt(String strTextString strEncrKey )
        {
            
byte[] bKey = new byte [8] ;
            
byte[] IV = {0x120x340x560x780x900xAB0xCD0xEF};

            try 
            {
                
bKey System.Text.Encoding.UTF8.GetBytesstrEncrKey.Substring(0,8));
                
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                
Byte[] inputByteArray Encoding.UTF8.GetBytes(strText);
                
MemoryStream ms = new MemoryStream();
                
CryptoStream cs = new CryptoStream(msdes.CreateEncryptor(bKeyIV), CryptoStreamMode.Write);
                
cs.Write(inputByteArray0inputByteArray.Length);
                
cs.FlushFinalBlock();
                return 
Convert.ToBase64String(ms.ToArray());

            }
            catch (
Exception ex
            {
                return 
ex.Message.ToString();
            }
        }


        public static 
String Decrypt(String strTextString strEncrKey )
        {
            
byte[] bKey = new byte [8] ;
            
byte[] IV = {0x120x340x560x780x900xAB0xCD0xEF};

            try 
            {
                
bKey System.Text.Encoding.UTF8.GetBytesstrEncrKey.Substring(0,8));
                
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                
Byte[] inputByteArray inputByteArray Convert.FromBase64String(strText);
                
MemoryStream ms = new MemoryStream();
                
CryptoStream cs = new CryptoStream(msdes.CreateDecryptor(bKeyIV), CryptoStreamMode.Write);
                
cs.Write(inputByteArray0inputByteArray.Length);
                
cs.FlushFinalBlock();
                
System.Text.Encoding encoding System.Text.Encoding.UTF8;
                return 
encoding.GetString(ms.ToArray());
            }
            catch (
Exception ex
            {
                return 
ex.Message.ToString();
            }
        } 
Te cuento que los he probado con los códigos
"00001","00002","00003","00004","00005","00006","0 0007","00008",
"00009","00010","00011","00012"

Funcionan con todos excepto con el código "00002"

Agradezco tu ayuda....
  #18 (permalink)  
Antiguo 06/04/2005, 10:40
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
mm... En cuanto a la codificacion del método no veo errores... pero ésto es lo que me llama la atencion:

Cita:
Session["modo"]=FuncGenerales.Decrypt(Request.QueryString["modo"],"&%#@?,:*");
id=FuncGenerales.Decrypt(Request.QueryString["id"],"&%#@?,:*");
por el código que tienes como vas a desencriptar el ID si no lo tienes encriptado..??

Tienes ésto:

Cita:
id = e.Item.Cells[1].Text.Trim();
En último de los casos te faltaría encriptar el ID tambien, checa esa parte..porque por ejemplo modo si lo tienes encriptado aqui:

Cita:
modo=FuncGenerales.Encrypt("M","&%#@?,:*");
Pero el id..??


Salu2
  #19 (permalink)  
Antiguo 06/04/2005, 11:18
Avatar de phinojosa  
Fecha de Ingreso: agosto-2004
Ubicación: Guayaquil-Ecuador
Mensajes: 145
Antigüedad: 20 años, 3 meses
Puntos: 2
Parece que no te fijaste bien RootK.

En la carga del grid tengo el código encriptado y lo agrego a una columna oculta en el DataGrid

Código PHP:
foreach(DataRow dr    in tblRecorre.Rows

 
dr["coCliEnc"]=FuncGenerales.Encrypt(dr["coClinica"].ToString(),"&%#@?,:*"); 

Por esta razón en el evento ItemCommand escojo la columna 1 y no la 0. Ya que en la columna 0 está una columna de tipo template, donde aparece el ID sin encriptar.

No se porque no funciona justo con el código "00002". Por que con el resto de códigos funciona.

Debe ser por ese espacio en blanco que se genera al momento de la encriptación. Pero le hice lo que me dijiste antes de que reemplace los espacios por el símbolo "+". Pero tampoco funciona.

Que puede ser?????
  #20 (permalink)  
Antiguo 28/04/2005, 15:30
 
Fecha de Ingreso: abril-2005
Mensajes: 3
Antigüedad: 19 años, 7 meses
Puntos: 0
Hola a todos

También tenía el problema y lo solucione de la siguiente forma

Para encriptar

Código PHP:
string str="Alejo";
System.Convert.FromBase64String(System.Convert.ToBase64String(System.Text.Encoding.Unicode.GetBytes(str)));
valueEncrypt this.RSA.Encrypt(valueToEncrypt,false);
str System.Convert.ToBase64String(valueEncrypt); 
y para des encriptar debes usar

Código PHP:
valueEncrypt System.Convert.FromBase64String(str);
valueNoEncrypt this.RSA.Decrypt(valueEncrypt,false);
str System.Text.Encoding.Unicode.GetString(System.Convert.FromBase64String(System.Convert.ToBase64String(valueNoEncrypt))); 
El problema esta en la conversión a String64 por eso utilizo los encodin

Espero te sirva Éxitos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:12.