Article View: es.comp.os.linux.programacion
Article #8147Re: Comprobar comtraseña
From: Jose A
Date: Tue, 17 Dec 2002 14:32
Date: Tue, 17 Dec 2002 14:32
84 lines
3284 bytes
3284 bytes
quantium escribi�:
> Hola a todos.
Hola.
> �Sabeis como puedo comprobar si una contrase�a insertada es la del
> usuario que la ha insertado?
>
> He estado mirando en google y en la faq de unix, se que lo tiros van por
> strcmp y crypt, pero no me queda nada clar, �me podriais poner un
> ejemplo sobre su uso?
Puedes usar algo asi:
---------------------- cortar aqu� --------------------------
#include <shadow.h>
int main (int argc, char *argv[0]) {
char *pwd, salt[11], *passwd, *tpwd;
struct spwd *p;
if (argc < 3) {
printf ("Usar %s nombre password\n", argv[0]);
exit (1);
}
// Limpiamos la variable salt para evitar problemas.
bzero (salt, sizeof (salt));
// Bloqueamos el fichero "/etc/shadow" para que no se
// modifique mientras accedemos a sus datos.
lckpwdf ();
p = getspnam (argv[1]);
// Y aqu� lo desbloqueamos.
ulckpwdf ();
pwd = argv[2];
passwd = p->sp_pwdp;
// Dentro de este bloque if comprobamos el tipo de
// password que se usa, si empieza por "$1$", es
// del tipo md5, y copiamos los 11 primeros caracteres
// del password que est�n formados por la identificaci�n
// (3 caracteres) y la salt (8 caracteres), por ejemplo:
// $1$aT���TjK
// Estos 11 caracteres son usados para que la funci�n crypt
// identifique la password como del tipo md5.
if (memcmp (passwd, "$1$", 3) == 0) {
strncpy (salt, passwd, 11);
// Si no es del tipo des y se cogen solo los 2 primeros
// caracteres.
} else {
strncpy (salt, passwd, 2);
}
// Aqu� se encripta la password pasada al programa y
// a continuaci�n se compara con la almacenada en el
// fichero "/etc/shadow".
tpwd = (char *) crypt (pwd, salt);
if (strcmp (tpwd, passwd) == 0) {
printf ("Las password son iguales\n");
} else {
printf ("Las password son distintas\n");
}
return 0;
}
---------------------- cortar aqu� --------------------------
Se compila as�:
gcc -o nombre_fichero nombre_fichero.c -lcrypt
y el uso es as�:
./nombre_fichero usuario password
donde usuario es el usuario del fichero "/etc/shadow" y password es la
password sin encriptar que quieres comprobar.
espero que te sirva.
> Muchas gracias a todos y un saludo,
saludos.
Technical Details
Message-ID:
<atncbv$k5m81@cesio.mundo-r.com>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed.esat.net!lnewspeer00.lnd.ops.eu.uu.net!emea.uu.net!cesio.mundo-r.com!not-for-mailReferences:
<atgjct$13knnp$1@ID-129971.news.dfncis.de>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,249be857bbf5a850 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2002-12-17 07:21:06 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed.esat.net!lnewspeer00.lnd.ops.eu.uu.net!emea.uu.net!cesio.mundo-r.com!not-for-mail From: Jose A <MAQUI000@.NOSPAN.mundo-r.com> Newsgroups: es.comp.os.linux.programacion Subject: Re: Comprobar comtraseña Date: Tue, 17 Dec 2002 15:32:46 +0100 Organization: Another Netscape Collabra Server User Lines: 85 Message-ID: <atncbv$k5m81@cesio.mundo-r.com> References: <atgjct$13knnp$1@ID-129971.news.dfncis.de> NNTP-Posting-Host: 213.60.228.203 Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8Bit User-Agent: KNode/0.7.1