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

Encriptacion

Estas en el tema de Encriptacion en el foro de .NET en Foros del Web. Buenas, Os comento un poco, hace mucho mucho tiempo :) hice una aplicacion en VB para encriptar unos passwords de la BD, pues bien ahora ...
  #1 (permalink)  
Antiguo 12/09/2005, 05:37
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Encriptacion

Buenas,

Os comento un poco, hace mucho mucho tiempo :) hice una aplicacion en VB para encriptar unos passwords de la BD, pues bien ahora estoy programando en visual C# y por perreria quiero utilizar la mismas funciones pero no acaba de funcionar bien.

Os pongo el codigo en VB:

Public Function Encrypt(ByVal cadena As String)
Dim longCadena As Long
Dim longClau As Long
Dim pCa As Long
Dim pCl As Long
Dim retorn As String
Dim c As Integer
Dim clau As String
clau = "n0 t1ndr3m t3mp5"
longCadena = Len(cadena)
longClau = Len(clau)
pCa = 1
pCl = 1

If longClau = 0 Then
Encrypt = ""
Exit Function
End If

While pCa <= longCadena
c = Asc(Mid(cadena, pCa, 1)) + Asc(Mid(clau, pCl, 1))
If c > 254 Then
c = c - 254 + 31
End If
retorn = retorn & Chr(c)

pCa = pCa + 1
pCl = pCl + 1
If pCl > longClau Then
pCl = 1
End If
Wend
Encrypt = retorn

End Function

Public Function Decrypt(ByVal cadena As String)
Dim longCadena As Long
Dim longClau As Long
Dim pCa As Long
Dim pCl As Long
Dim retorn As String
Dim c As Integer
Dim clau As String

clau = "n0 t1ndr3m t3mp5"
longCadena = Len(cadena)
longClau = Len(clau)
pCa = 1
pCl = 1

If longClau = 0 Then
Decrypt = ""
Exit Function
End If

While pCa <= longCadena
c = Asc(Mid(cadena, pCa, 1)) - Asc(Mid(clau, pCl, 1))
If c < 32 Then
c = c + 254 - 31
End If
retorn = retorn & Chr(c)

pCa = pCa + 1
pCl = pCl + 1
If pCl > longClau Then
pCl = 1
End If
Wend
Decrypt = retorn

End Function
----------------------------------------------------------------------------
Aqui stan las funciones q he "traspasado" a C#

using System;
using System.Text;


namespace Encripta
{

public class Encriptacion
{

private int nCa;
private int nC1;
private String sclau;


public Encriptacion()
{

}

public String Encriptar(String scadena)
{
Encoding ascii=Encoding.ASCII;
String sresultado=null;
sclau="AqUi PaSANdo 3l RatiLLO2";
Byte[] Auxiliar;
Byte[] codificar;
Byte[] codificar2;
Auxiliar=new Byte[scadena.Length];
int nvalor;

nCa=0;
nC1=0;

while (nCa<scadena.Length)
{
codificar=ascii.GetBytes(scadena.Substring(nCa,1)) ;
codificar2=ascii.GetBytes(sclau.Substring(nC1,1));
nvalor=(Int32)codificar[0]+(Int32)codificar2[0];
Auxiliar[nCa]=(Byte)nvalor;
if (nvalor>254)
{
nvalor = nvalor - 254 + 31;
Auxiliar[nCa]=(Byte)nvalor;
}//if
nCa = nCa + 1;
nC1 = nC1 + 1;

if (nC1>sclau.Length)
{
nC1=1;
}//if
}//while
sresultado=ascii.GetString(Auxiliar);

return sresultado;

}//Encriptar

public String Desencriptar(String scadena)
{
Encoding ascii=Encoding.ASCII;
String sresultado=null;
sclau="AqUi PaSANdo 3l RatiLLO2";
Byte[] Auxiliar;
Byte[] codificar;
Byte[] codificar2;
Auxiliar=new Byte[scadena.Length];
int nvalor=130;

nCa=0;
nC1=0;
while (nCa<scadena.Length)
{
Auxiliar[0]=(Byte)nvalor;
String s=ascii.GetString(Auxiliar);
codificar=ascii.GetBytes(scadena.Substring(nCa,1)) ;
codificar2=ascii.GetBytes(sclau.Substring(nC1,1));
nvalor=(Int32)codificar[0]-(Int32)codificar2[0];

Auxiliar[nCa]=(Byte)nvalor;
if (nvalor<32)
{
nvalor = nvalor + 254 - 31;
Auxiliar[nCa]=(Byte)nvalor;
}//if
nCa = nCa + 1;
nC1 = nC1 + 1;

if (nC1>sclau.Length)
{
nC1=0;
}//if
}//while
sresultado=ascii.GetString(Auxiliar);

return sresultado;

}//Desencriptar
}
}

Pues bien en VB tenemos la funcion Asc q pasa de int a ASCII y en C# utilizo(no se si es correcto): Encoding ascii=Encoding.ASCII;

Esta funcion tiene los metodos getByte(para coger el valor en Bytes) getString y getChars

Pues si yo en mi funcion encriptar le paso la Cadena "AB" esta me devuelve que los valors de Auxiliar son el 130,179(hasta aqui correcto, un codigo encripatado formado por un "cuadrado" y un 3) pero luego en desencriptar cuando coge con el getBytes el valor del de la 1ª posicion de la cadena ya encriptada es una especie de l "cuadrado"me devuelve un 2 en vez del 130 q le tendria q corresponder y no tengo ni idea de pq...

Luego habia pensado q en vez del getString utilizar el GetChars, pero claro este trabaja cuando en la funcion encriptar probase:

Chars[] sresultado=new Chars[scadena.lenght]//declaro y dimension vlbe

Y luego hiciese:
sresultado=ascii.getChars(Auxiliar);
Esto no se si es correcto....

Alguna sugerencia?¿

GRACIAS
  #2 (permalink)  
Antiguo 12/09/2005, 08:21
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 2 meses
Puntos: 76
Si te sirve el cifrado en MD5, mira este link

http://www.dotnetcr.com/index.aspx?I...5-en-NET-con-C

Ya lo probe y funciono a la perfeccion.

__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #3 (permalink)  
Antiguo 12/09/2005, 08:32
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Ummm.... jhonwilliams, creo que no le va a servir la encriptación MD5, porque kakarot tienen una función de encriptación y otra de desencriptación. Con MD5 no se puede desencriptar a no ser que uses la "fuerza bruta".

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #4 (permalink)  
Antiguo 12/09/2005, 08:48
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 2 meses
Puntos: 76
A mi me gusta el cifrado MD5 por su seguridad, facil de utilizar y casi imposible de romper.
Es muy sencillo autenticar usuarios con claves cifradas en MD5
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #5 (permalink)  
Antiguo 12/09/2005, 08:56
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Qué sí, qué sí, que a mí también, pero supongo que kakarot quiere poder desencriptarlos, por tanto no le vale de nada ni el MD5 ni el SHA1.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #6 (permalink)  
Antiguo 12/09/2005, 09:08
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 2 meses
Puntos: 76
Deacuerdo

Notica: Creo que usar el termino encriptar y desencriptar no es muy correcto, lei en uno de los foros que eso corresponde a entrar y sacar cosas de una cripta, por eso es mas correcto usar cifrar
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)

Última edición por jhonwilliams; 12/09/2005 a las 09:40 Razón: Correccion de ortografia
  #7 (permalink)  
Antiguo 12/09/2005, 09:20
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Je je, de acuerdo también. Aunque más correcto sería encr"I"ptar y desencr"I"ptar. Ay, el inglés que hace mella.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #8 (permalink)  
Antiguo 12/09/2005, 11:47
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Pues gracias a los dos, pero lo como bien habeis dicho necesito recuperar los datos encriptados para despues desencriptarlos, pero me miraré el md5, pq quiza para lo q necesito tb me funcione, de todas formas probaré en vez de retornar un char[] retornar un object a ver q tal

Pues ya me lo he mirado, y la verdad q es algo parecido al mio, el problema es lo siguiente, yo lo cifro(ya no digo encripto ) y luego en la BD cuando el usuario introduce su password como sabe si es correcto?¿

gracias
  #9 (permalink)  
Antiguo 13/09/2005, 00:44
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Pues bien. Si tienes en un campo la contraseña cifrada ( ) para comprobar la validez no tienes más que cifrar el valor del campo de texto que ha introducido el usuario. Si esta cadena cifrada coincide con la que está en la base de datos pues es que es la misma. Según creo y parece más lógico, ningún resultado del cifrado de cadenas de texto es igual a otro, sea cual sea el texto a cifrar.

Por ejemplo:

Código:
Dim usuario As String = Me.txtUsuario.Text
Dim cifrada As String =           FormsAuthentication.HashPasswordForStoringInConfigFile(Me.txtPass.Text, "MD5")
Dim strSel As String = "SELECT * FROM Tabla WHERE usuario = '" & usuario & "' AND contraseña = '" & cifrada & "'"
Si la consulta te devuelve algún resultado es que el usuario y la contraseña son correctos.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #10 (permalink)  
Antiguo 13/09/2005, 07:42
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Gracias a todos, mas o menos hice algo igual q lo q habiais comentado, la verdad q el md5 es una maravilla
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




La zona horaria es GMT -6. Ahora son las 14:47.