🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #8147

Re: Comprobar comtraseña

#8147
From: Jose A
Date: Tue, 17 Dec 2002 14:32
84 lines
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-mail
References: <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