目录
1.1 LINUX密码校验过程
1. 密码存储在哪里
- /etc/shadow
- 读配置文件 man 5 shadow
- getspnam(3)
2. 密码是不可逆的
- crypt(3)加密密码
3.密码的键入
- getpass(3)
// 通过加密算法对key进行加密,并添加salt
$[算法类型]$[盐值]$[加密后]
char *crypt(const char *key, const char *salt); // 加密函数
// 可得到当前用户密码加密后的信息
struct spwd *getspnam(const char *name)
1.2 Makefile
编写编译规则
文件名叫makefile MAKEFILE Makefile
如果工程文件很多很大,那么如果不提供makefile,则很难清除先编译什么再编译什么,如果有了makefile文件,则直接make编译即可
举例说明
# 变量
SRC=print.c // 文件名
OBJ=print // 目标文件
# 链接库
LDFLAGS+=-lcrypt
# 规则 $@目标文件 $^依赖文件
$(OBJ):$(SRC)
gcc -o $@ $^ $(LDFLAGS)
# 伪目标
clean:
rm $(OBJ)
test:
echo "hello world"
# 注:make没有参数默认第一个 伪目标就是make 后的参数
print: print.c
gcc -o $@ $^ $(LDFLAGS)
clean:
rm print
1.3 切割字符串 strsep(3) strtok(3)
char *strsep(char **stringp, const char *delim)
- *strngp就是指向要切割的字符串
- delim由切割字符组成的字符串
- return:切割出来的字串
- 切割完成*stringp指向NULL
按照字符串中单个字符字符进行分割
返回截断前的字符串并追加\0
改变原字符串的指向 --> 指向截断后的
strtok(3) 类同
char *strtok(char *str, const char *delim);