函数crypt()
返回类似TyVkFBglLfEGw
的字符串,当我的Ubuntu机器上的所有密码都像
$6$Ty8Ew9/O$V/ck4Apc7VOOqobhenO5.f6ccsVdCpQy5H6fyuNzCaDG.LxFnUWKHOobkpRQQtl.1cFG8BLAdfWjNbLiSxKXF/
我认为我的机器使用SHA512算法。如何在C程序中创建像/etc/shadow
文件中的散列字符串?
答案 0 :(得分:4)
如果您阅读man page for crypt;特别是关于Glibc注意到的那篇文章,它提到了以下内容:
The glibc2 version of this function supports additional encryption
algorithms.
If salt is a character string starting with the characters "$id$"
followed by a string terminated by "$":
$id$salt$encrypted
然后,而不是使用DES机器,id识别加密
使用的方法然后确定密码的其余部分
字符串被解释。支持以下id值:
ID | Method
─────────────────────────────────────────────────────────
1 | MD5
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
所以$ 5 $ salt $ encrypted是一个SHA-256编码的密码和 $ 6 $ salt $ encrypted是一个SHA-512编码的。
这意味着您应该将一个字符串作为包含字符串$6$salt
的salt传入,以使其生成sha-512地穴,例如。
char *salt = "$6$pt4wu5ns";
char *password = "muppet show";
printf("%s\n", crypt(password, salt));
答案 1 :(得分:-3)
这是一个关于如何实现sha1算法的网站。
通常我会描述算法,但确实存在;没有任何内容,只需将这些位与一系列复杂的加法和移位混淆。棘手的一点是让它与其他人完全一致; s sha1代码。