C. *_*oss 11 security linux password
我正在学习 Linux 密码安全性(比任何有用的东西都更令人好奇),并且我知道真正的密码被散列并存储在影子密码文件中。我不确定并且在我的简短谷歌搜索中无法找到的是用于对散列值(以及盐的值)进行编码的编码。它显然不是十六进制,它显然是文本,不包括:字符。这里有人能告诉我那个编码是什么吗?
编辑:我了解散列(MD5、SHA-X)、盐和散列说明符。我正在寻找的是将哈希结果(字节数组(byte []))转换为我在文件中看到的字符序列的方法,即:编码。
Sim*_*onJ 11
在 MD5 crypt() 的情况下,salt 只是来自 [a-zA-Z0-9./] 的最多 8 个字符的随机字符串。
然后将盐和密码散列在一起,通过强化函数,然后使用 Base64 上的变体进行编码:
小智 9
如果您只想知道密码是如何编码的,crypt() 使用特殊的 Base64 类型的编码。
Base64 编码使用以下字符集:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
虽然crypt() 编码使用这个字符集:./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
此外,与 Base64 不同,没有“=”填充。
另一方面,MD5、SHA-X 等的 crypt() 实现不仅仅是生成随机盐,运行散列函数并使用前一种编码对其进行编码。
我建议阅读这两篇很棒的文章:“与 MD5 相关的 MD5-crypt 密码哈希”和“SHA512-crypt 与 MD5-crypt 的实现”,以获得更完整的解释。