https://foro.gambas-es.org/viewtopic.php?f=4&t=1185
-----------------------------------
techm3
Lunes, 06 Diciembre 2010, 20:42

Crypt.MD5
-----------------------------------
Buenas tardes,
Se que se ha discutido varias veces y de hecho soplo escribió un artículo sobre encriptación en MD5 con crypt.MD5 pero aún sigo sin entender como utilizar este componente.

Lo que deseo es que el usuario escriba su clave en un textbox y que al apretar un botón este texto se encript en MD5. Este se enviará a una tabla de la base de datos y luego hay que comprobarla de nuevo en otro formulario.

Alguien podría explicarme esto de nuevo si no es mucho pedir :)


-----------------------------------
soplo
Lunes, 06 Diciembre 2010, 21:04

Re: Crypt.MD5
-----------------------------------
Hola
Con crypt.mdt(textbox.text) tu encriptas algo que te hayan escrito en el textbox osea que tienes un nuevo string que corresponde a lo que te pusieron en el textbox encriptado.

Ahora vas tu y guardas el usuario y el md5 en una base de datos.

Unos dias despues el usuario quiere entrar. escribe su usuario y su clave.  Tu haces lo siguiente:
1. Buscas en la base de datos el md5 que guardaste
2. Encriptas la clave que ha escrito
3. Comparas la clave encriptada con el md5 que tienes en base de datos
Si son iguales la clave es válida. Si son distintos la clave es inválida.

 :mryellow:


-----------------------------------
techm3
Lunes, 06 Diciembre 2010, 21:41

Re: Crypt.MD5
-----------------------------------
Gracias por tu rápido respuesta soplo,

Resulta que para probarlo antes de integrarlo con la base de datos he utilizado el siguiente código (inventado y seguramente erróneo) 

[code linenumbers=false syntax=gambas]' Gambas class file
PUBLIC pass AS String
PUBLIC pass2 AS String



PUBLIC SUB Button1_Click()

pass = Crypt.MD5(TextBox1.Text)

TextBox2.Text = pass


END 

PUBLIC SUB Button2_Click()

pass2 = Crypt.MD5(TextBox3.Text)
  IF pass = pass2 THEN 
  Message.Info("ok")
  ELSE 
  Message.Warning("wrong password")
  ENDIF 

END
[/code]
y no me funciona. siempre me da ok aunque este mal. Otra cosa, cuando encripta en MD5 siempre comienza con $1$ y hasta donde tengo entiendo MD5 no es así..


-----------------------------------
soplo
Lunes, 06 Diciembre 2010, 22:14

Re: Crypt.MD5
-----------------------------------
pues tendré que probar eso porque no veo nada mal en lo que pones.

De todas formas ya te advierto que estoy trabajando en una clase para trabajar conc certificados y obviamente con md5 no voy a ningún lado así que estoy utilizando openssl. Puedes probar a encriptar la misma clave en md5 con crypt y con openssl a ver que pasa.

shell("openssl passwd -l " & textbox1.text) to var
textbox2.text=var


-----------------------------------
fabianfv
Miercoles, 08 Diciembre 2010, 03:28

Re: Crypt.MD5
-----------------------------------
techm3, no me detuve a debuggear tu código, sólo escribí este ejemplo y funciona correctamente:

[code linenumbers=false syntax=gambas]
PUBLIC pass AS String

PUBLIC SUB btnCheck_Click()
  pass = Crypt.MD5(TextBox1.Text)
  IF NOT Crypt.Check(TextBox2.Text, pass) THEN
    Message.Info("ok")
  ELSE
    Message.Error("wrong password")
  ENDIF
END
[/code]


-----------------------------------
DEATH
Jueves, 28 Febrero 2013, 16:55

Re: Crypt.MD5
-----------------------------------
[quote user="soplo" post="6797"]pues tendré que probar eso porque no veo nada mal en lo que pones.

De todas formas ya te advierto que estoy trabajando en una clase para trabajar conc certificados y obviamente con md5 no voy a ningún lado así que estoy utilizando openssl. Puedes probar a encriptar la misma clave en md5 con crypt y con openssl a ver que pasa.

shell("openssl passwd -l " & textbox1.text) to var
textbox2.text=var[/quote]

soplo... como veo que usas un password con openssl, me da entender que puedes luego desencriptarlo con el mismo pass cierto?... de ser así como sería?


-----------------------------------
jguardon
Jueves, 28 Febrero 2013, 17:02

Re: Crypt.MD5
-----------------------------------
Hola DEATH

Lamentablemente el compañero [b]soplo[/b] lleva mas de dos años sin escribir en el foro, así que no creo que conteste. Lo que quiero decir, aprovechando la ocasión, es que si vemos que un mensaje es muy antiguo, como en este caso, es mejor plantear la pregunta en un nuevo mensaje, en lugar de reabrir uno tan antiguo.

Aunque podemos hacer referencia al mensaje antiguo, éste puede que no esté en contexto con la actualidad, por ejemplo sólo porque hoy en día hablamos casi exclusivamente de Gambas3 y no de gambas2, como era hace casi 3 años.

Saludos


-----------------------------------
DEATH
Jueves, 28 Febrero 2013, 17:04

Re: Crypt.MD5
-----------------------------------
[quote user="jguardon" post="16501"]Hola DEATH

Lamentablemente el compañero [b]soplo[/b] lleva mas de dos años sin escribir en el foro, así que no creo que conteste. Lo que quiero decir, aprovechando la ocasión, es que si vemos que un mensaje es muy antiguo, como en este caso, es mejor plantear la pregunta en un nuevo mensaje, en lugar de reabrir uno tan antiguo.

Aunque podemos hacer referencia al mensaje antiguo, éste puede que no esté en contexto con la actualidad, por ejemplo sólo porque hoy en día hablamos casi exclusivamente de Gambas3 y no de gambas2, como era hace casi 3 años.

Saludos[/quote]


vale no hay problema...

saludos!


-----------------------------------
Fenriz07
Jueves, 14 Marzo 2013, 20:07

Re: Crypt.MD5
-----------------------------------
Aqui deje la solucion. la implemente en estos dias:
http://foro.gambas-es.org/viewtopic.php?f=3&t=2981

[code linenumbers=false syntax=gambas]Public Sub Button1_Click()
Dim n_u As Result
Dim ci As Integer
Dim password As String
n_u = cn.Exec("SELECT * FROM cuentas where nombre_u  = '" & user.text & "';")
If Crypt.Check(pass.Text, n_u!pass) = False Then 
 ci = n_u!ci
 Message.Info("Correcto")
 principal.Show
 principal.ciu.Text = ci
 Me.Close

 Else
  Message.Error("Incorrecto")
End If

End[/code]


-----------------------------------
jguardon
Jueves, 14 Marzo 2013, 20:24

Re: Crypt.MD5
-----------------------------------
Ok, Fenriz07

No tengas miedo de usar nombres de variables más largos y descriptivos, te facilitará la vida un montón... te lo aseguro! :wink: 

Gracias por el ejemplo,

Saludos


-----------------------------------
Cubel
Viernes, 06 Noviembre 2015, 10:15

Re: Crypt.MD5
-----------------------------------
Buenos días,

estoy intentando usar esta clase en Gambas3 pero me parece que debo estar haciendo algo mal porque no me genera la pass correctamente.

En un principio la quiero para lo típico de login con la base de datos, pero haciendo unas pruebas con solo un campo de texto veo que no funciona bien. De hecho con el mismo texto cada vez me saca un string diferente así que intentado pasárselo en una variable y lo mismo. Aparte el resultado no coincide con lo que puedes ver en cualquier otra aplicación que codifique en MD5

[code linenumbers=false syntax=gambas]

Public Sub btn_login_Click()
  Dim pass As String
  pass = "hola"
  Print Crypt.MD5(pass)
End

[/code]

Resultado de cualquier app de MD5:
4d186321c1a7f0f354b297e8914ab240

Resultados de Print (varias pulsaciones de botón)
$1$tuLgfVKc$sQV/EWUXA4SMA.YkUSFlR0
$1$SzNL9FfP$ntfwJUvJNa4CvF.qZVgO1/
$1$dcDkvzwm$GHvgoTW.M8tvehW.KuEQn1
$1$eZ6J21Xv$WzYnn5msCWyPaskFXXoIw/
$1$vrbZLu8m$I02u/v9y2anUuiyWeRuMC


-----------------------------------
jguardon
Viernes, 06 Noviembre 2015, 14:32

Re: Crypt.MD5
-----------------------------------
Hola, Cubel

Efectivamente estás utilizando mal la función para el cometido que describes.

La función Crypt.MD5 acepta 2 argumentos, el primero es la cadena a encriptar y el segundo [b]un prefijo de 8 caracteres[/b] de tipo cadena, lo que pasa es que si no se especifica éste último, se genera aleatoriamente cambiando el resultado de la encriptación cada vez.

http://gambaswiki.org/wiki/comp/gb.crypt/crypt/md5

La solución es pasar una cadena de caracteres fija en el segundo argumento, algo así:

[code linenumbers=false syntax=gambas]Public Sub btn_login_Click()
  Dim pass As String
  pass = "hola"
  Print Crypt.MD5(pass, "HvgoTW.M")
End[/code]

Saludos


-----------------------------------
Cubel
Viernes, 06 Noviembre 2015, 16:01

Re: Crypt.MD5
-----------------------------------
Vale vale.

El problema es el siguiente:

Yo en la base de datos tengo pass creados con el pass del usuario + una cadena de texto aleatoria.
Se supone que para hacer login en la web la función es:
1- traer la cadena de texto aleatoria,
2- juntar el pass introducido por el usuario con la cadena aleatoria
3- hacer el md5
4- comparar con el campo pass que hay en la base de datos.

El problema es que esa cadena no tiene 8 caracteres, son muchos mas... Tendré que hacerme mi propia función de MD5?


-----------------------------------
Cubel
Jueves, 19 Noviembre 2015, 08:43

Re: Crypt.MD5
-----------------------------------
[quote user="Cubel" post="28740"]Vale vale.

El problema es el siguiente:

Yo en la base de datos tengo pass creados con el pass del usuario + una cadena de texto aleatoria.
Se supone que para hacer login en la web la función es:
1- traer la cadena de texto aleatoria,
2- juntar el pass introducido por el usuario con la cadena aleatoria
3- hacer el md5
4- comparar con el campo pass que hay en la base de datos.

El problema es que esa cadena no tiene 8 caracteres, son muchos mas... Tendré que hacerme mi propia función de MD5?[/quote]

Procedo a hacer mi propia función porque como comento, la función MD5 que trae gambas por defecto no me sirve. El MD5 lo estoy usando actualmente en Android, iOS, javascript y PHP y lógicamente me sale más factible crearme el código aquí, que tener que cambiar todos los lenguajes para adaptarlo a gambas. Cuando tenga el código lo subiré aquí o a Github por si a alguien le sirve.


-----------------------------------
jguardon
Jueves, 19 Noviembre 2015, 21:08

Re: Crypt.MD5
-----------------------------------
La verdad es que me parece muy extraño que esa función trabaje así... No sé si estamos pasando algo por alto, pero por más que lo miro no encuentro la forma. Funcionar, funciona, pero no como en el resto de lenguajes. :shock: 

Saludos


-----------------------------------
sebikul
Sabado, 21 Noviembre 2015, 06:06

Re: Crypt.MD5
-----------------------------------
[quote user="Cubel" post="28898"][quote user="Cubel" post="28740"]Vale vale.

El problema es el siguiente:

Yo en la base de datos tengo pass creados con el pass del usuario + una cadena de texto aleatoria.
Se supone que para hacer login en la web la función es:
1- traer la cadena de texto aleatoria,
2- juntar el pass introducido por el usuario con la cadena aleatoria
3- hacer el md5
4- comparar con el campo pass que hay en la base de datos.

El problema es que esa cadena no tiene 8 caracteres, son muchos mas... Tendré que hacerme mi propia función de MD5?[/quote]

Procedo a hacer mi propia función porque como comento, la función MD5 que trae gambas por defecto no me sirve. El MD5 lo estoy usando actualmente en Android, iOS, javascript y PHP y lógicamente me sale más factible crearme el código aquí, que tener que cambiar todos los lenguajes para adaptarlo a gambas. Cuando tenga el código lo subiré aquí o a Github por si a alguien le sirve.[/quote]

Ejecutando este comando deberias obtener lo que buscas.

[code linenumbers=false syntax=gambas]Shell "echo -n \"" & txt & "\" | md5sum" to sDigest[/code]


-----------------------------------
shordi
Sabado, 21 Noviembre 2015, 12:12

Re: Crypt.MD5
-----------------------------------
Curioso, mirando el manual de md5sum dice que md5 no debiera ser usado más para mantener cosas seguras. Preferible SHA2... sic transit gloria mundi.  :?


