注:下面按照“1234“作为明文密码做演示
1、密码的生成规则
查看passwd文件发现由如下内容
cat passwd
root:$5$PHE/Zsb.x38Sr8pV$6jfLsgS2i0Fxy37Rz8yivu3Xu1MTHALRutc.Dx/Bt28:0:0::/root:/bin/sh
root:用户名
$5$PHE/Zsb.x38Sr8pV$6jfLsgS2i0Fxy37Rz8yivu3Xu1MTHALRutc.Dx/Bt28:密码字段
看到这里,你可能会有疑问,密码字段是由什么算法生成的?
这里的密码字段是以crypt(3)的格式存储的,
$5$
是加密算法,这表示使用的是SHA-256算法。
PHE/Zsb.x38Sr8pV
是crypt的盐值,明文密码按照1234
计算,我们可以得出加密后的结果
$5$PHE/Zsb.x38Sr8pV$6jfLsgS2i0Fxy37Rz8yivu3Xu1MTHALRutc.Dx/Bt28
。
2、下面给出crypt的计算样例,感兴趣的小伙伴可以验证一下
$ cat crypt.cpp
#include <iostream>
#include <cstring>
#include <unistd.h>
#include <crypt.h>
int main() {
std::string password = "1234";
std::string salt = "$5$PHE/Zsb.x38Sr8pV";
char* encryptedPassword = crypt(password.c_str(), salt.c_str());
std::cout << "Encrypted Password: " << encryptedPassword << std::endl;
return 0;
}
$ g++ crypt.cpp -lcrypt
$ ./a.out
Encrypted Password: $5$PHE/Zsb.x38Sr8pV$6jfLsgS2i0Fxy37Rz8yivu3Xu1MTHALRutc.Dx/Bt28
如果你对上面的内容感兴趣,我建议你看一下我的另外一篇文章
Linux下passwd与shadow的关系