擅长:python、mysql、java
<p>您将向函数传递特殊的salt字符串,该函数调用Mac OS X上不可用的glibc特定crypt行为</p>
<blockquote>
<p>If salt is a character string starting with the characters "$id$" followed by a string terminated by "$"...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.</p>
</blockquote>
<p>在python示例中,告诉crypt使用1的<code>id</code>,这将导致使用MD5而不是基于DES的散列。macosx上没有这样的扩展,其中<code>crypt</code>严格基于DES。(MacOSX的<code>crypt</code>有自己的扩展salt可以是一个9字符的数组,以下划线开头,后面是4个字节的迭代计数,4个字节的salt在glibc的实现中没有类似项。)</p>
<p>如果在两个平台上都避免了<code>crypt</code>扩展,而使用传统的<code>crypt</code>,其中salt只能是两个字节,那么在两个平台上从函数中得到的结果是相同的,例如:</p>
<pre><code>>>> crypt.crypt( "test", "S/" )
'S/AOO.b04HTR6'
</code></pre>
<p>从安全角度来看,这显然很糟糕。考虑使用<a href="http://code.google.com/p/passlib/" rel="noreferrer" title="passlib">passlib</a>或{a2}之类的东西。任何一种方法都可以让你同时获得更好的哈希和跨平台可靠性。在</p>