<p>这是因为Linux的glibc处理密码的方式不同——Linux上的密码盐对应于它生成的哈希类型。OSX crypt()是普通的旧DES加密(这很可怕)。在</p>
<p>glibc支持多种哈希算法(MD5、Blowfish、SHA-256等)。在</p>
<p>如果我们看一下<a href="http://www.kernel.org/doc/man-pages/online/pages/man3/crypt.3.html" rel="noreferrer">crypt.3</a>手册页,我们可以看到:</p>
<pre><code> If salt is a character string starting with the characters "$id$" followed by
a string terminated by "$":
$id$salt$encrypted
then instead of using the DES machine, id identifies the encryption method
used and this then determines how the rest of the password string is
interpreted. The following values of id are supported:
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)
</code></pre>
<p>所以,考虑到这些信息。。让我们从第二个例子中使用Linux的crypt获取您的密码</p>
^{pr2}$
<p>幸运的是,有一个跨平台的解决方案,<a href="http://packages.python.org/passlib/lib/passlib.hash.md5_crypt.html" rel="noreferrer">passlib.hash.md5_crypt</a>。在</p>
<p>你怎么用的:</p>
<pre><code>from passlib.hash import md5_crypt
hash = md5_crypt.encrypt("test",salt="VFvON1xK")
print hash
</code></pre>
<p>在Linux或OSX上运行时,生成glibc友好的密码哈希:</p>
<pre><code>$1$VFvON1xK$SboCDZGBieKF1ns2GBfY50
</code></pre>
<p>与Linux机器上的原始版本相同。在</p>