getpwnam() getpwuid()和getspnam() crypt()函数功能

getpwnam()和getpwuid()

 #include <sys/types.h>
#include <pwd.h>
struct passwd *getpwnam(const char *name);
struct passwd *getpwuid(uid_t uid);

//passwd结构体信息
struct passwd {
               char   *pw_name;       /* username */
               char   *pw_passwd;     /* user password */
               uid_t   pw_uid;        /* user ID */
               gid_t   pw_gid;        /* group ID */
               char   *pw_gecos;      /* user information */
               char   *pw_dir;        /* home directory */
               char   *pw_shell;      /* shell program */
           };

getpwnam():获取用户登录相关信息。返回一个指针,指向一个passwd结构体,其中包含用户名,密码,uid等信息。如果找不到匹配项或发生错误,则返回NULL。

getpwuid():用来搜索用户uid, 找到时便将该用户的数据以结构passwd结构返回。该结构包含密码数据库中与用户ID uid匹配的记录的字段。如果找不到匹配项或发生错误,则返回NULL。

getspnam()

很久以前,人们认为在密码文件中公开显示加密密码是安全的。当电脑越来越快,人们越来越有安全意识时,这就不再是可以接受的了。Julianne Frances Haugh实现了shadow密码套件,它将加密的密码保存在shadow密码数据库(例如,本地shadow密码文件/etc/shadow、NIS和LDAP)中,只有root用户才能读取。

#include <shadow.h>
struct spwd *getspnam(const char *name);

//spwd结构体信息
struct spwd {
               char *sp_namp;     /* Login name */
               char *sp_pwdp;     /* Encrypted password */
               long  sp_lstchg;   /* Date of last change
                                     (measured in days since
                                     1970-01-01 00:00:00 +0000 (UTC)) */
               long  sp_min;      /* Min # of days between changes */
               long  sp_max;      /* Max # of days between changes */
               long  sp_warn;     /* # of days before password expires
                                     to warn user to change it */
               long  sp_inact;    /* # of days after password expires
                                     until account is disabled */
               long  sp_expire;   /* Date when account expires
                                     (measured in days since
                                     1970-01-01 00:00:00 +0000 (UTC)) */
               unsigned long sp_flag;  /* Reserved */
           };

函数的作用是:根据用户名获取该用户的shadow密码。返回一个指向spwd结构体的指针,该结构体包含shadow密码数据库中与用户名匹配的记录的字段。如果发生错误,则返回NULL。

crypt()

crypt()是密码加密函数。它没有相应的解密函数,使用的是一种单向算法

#include <unistd.h>
char *crypt(const char *key, const char *salt);

参数:
key:是用户键入的密码。
salt:可选项,如果未提供 salt 参数,则每次调用该函数时会随机生成一个,是从集合[a–z A–Z 0–9 ]中选择的两个字符的字符串。此字符串用于以4096种不同方式之一干扰算法。

返回值:成功返回指向加密密码的指针。出错返回NULL。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值