myshell实现Sudo三部曲 : crypt函数和getpass函数

上一章, 我们讲了如何获取加密密码, 现在我们要做的就是输入密码, 然后验证. 在这一部分, 我们要学习两个函数: crypt()getpass()


crypt()

原型: char *crypt(const char *key, const char *salt);

key是要加密的信息(最多八字节), salt是加密的算法类型 和 扰动数据. 我们的密码就是用这种方式来加密的, 那么, 如何将输入的密码进行加密后对比呢. 我们首先要找到某用户的salt. salt就是在加密口令的开始一部分的值, 它的格式为: $id$salt$ . 我们读取了这一部分之后, 就可以进行比对了.


getpass()

原型: char *getpass(const char *prompt);

了解了crypt, 我们的Sudo基本就完成了。
但是有一个值得优化的地方:密码的输入不能是明文!!! 
那大家就再了解一个函数吧,getpass是一个非回显输入的函数,它的参数和readline一样,起到输入提示的作用。有了这个函数,我们就可以非回显的输入密码,不怕别人看见了。

有人可能会问,为什么不用getch()函数呢。原因很简单。 Linux下没有这个函数,如果我们要实现这种功能, 只能修改终端设置,我的shell中, 就用到了这种方法实现getch的。


结语:
这就是我实现sudo命令的整个思路,整个shell的链接如下 github : myshell

你可能感兴趣的:(myshell实现Sudo三部曲 : crypt函数和getpass函数)