http://www-128.ibm.com/developerworks/cn/linux/l-md5crypt/
GNU 扩展:MD5 加密
GNU 对 crypt() 函数提供了以下扩展:如果 salt 是一个以 3 个字符 "$1$" 开始的字符串,后面是前 8 个字符(可以以 "$" 结束),那么 crypt() 函数就不使用 DES 算法,而是使用基于 MD5 的算法,并输出 34 个字节的内容。具体来说,这些字节是 $1$[string]$[encrypted-string],其中 [string] 代表 salt 中 "$1$" 后面的 8 个字符,后面是 22 个从 [a-zA-Z0-9./] 集合中选出的字符。
这些扩展具有以下优点:
基于 MD5 的加密比已经过时的 DES 提供了更好的安全性和更大的密钥空间。
整个密码都非常重要,而不仅仅是前 8 个字节。
回页首
算法的伪代码
这个算法使用两个 MD5 散列值对密码和 salt 进行一系列转换来进行工作。返回值是一组包含 34 个可打印的 ASCII 字符的组合,其格式如下:
$1$[salt]$[encrypted] |