2013-10-01 55 views
0

難以讓crypt爲我的Ubuntu鹽工作。我可以用任意鹽來運行它,但是用特殊的鹽不能。任何幫助表示讚賞。Python Crypt導入Linux Salt

這工作:

cryptWord = crypt.crypt('word', "HX") 
    print cryptWord 
    #prints salted word 

這不:

zebra = crypt.crypt('password', "$1\$WDvKY5n\$") 
    print zebra 
    # prints None 

我想能夠醃製單詞比作將於密碼,但我無法與更先進的鹽。有任何想法嗎?

+1

請向我們展示一個演示問題的完整示例。 'print(斑馬)'當然會返回'None',因爲這是'print' _always_返回的結果......但它會打印$ 1d2n7Q0.r54s到標準輸出。 – abarnert

+0

試圖更清楚地解釋 – blankwall

+1

@blankwall是否確定您沒有使用其他變量或其他內容而不是字符串'password'和「$ 1 \ $ WDvKY5n \ $」?在這裏它運行良好 –

回答

2

這是一種無效的鹽。

雖然the documentation不這樣說,the source明確表示crypt.crypt將返回None如果底層C函數返回NULL。 POSIX允許它這樣做,並且linux/glibc在給出無效鹽時明確地這樣做。

那麼,這個鹽有什麼問題?

如果您閱讀聯機幫助頁上的「Glibc備註」部分,字符串$1\$WDvKY5n\$將使用1\作爲其加密方法標識。有一種加密方法,編號爲1,但沒有編號爲1\。此外,鹽本身是WDvKY5n\,但鹽只允許包含集[a-zA-Z0-9/]中的字符。

最有可能的是,您以某種方式打印出salt,導致$字符被轉義(對於shell?),然後複製並粘貼轉義版本而不是實際字符串。

如果這是錯誤的,只需使用$1$WDvKY5n$,一切都會好起來的。

如果還有其他問題出現,並且鹽不可逆轉地出現亂碼,請正確查找並使用您找到的任何東西。

同時,這樣做的原因爲工作人員在其他平臺上(返回'$1d2n7Q0.r54s'而不是None)是BSD和FreeSec crypt(股票的實現方案,除了大多數的Linux POSIX平臺)都採取不與啓動任何鹽下劃線是一個傳統的crypt值,前兩個字符可以是任何ASCII值,鹽的其餘部分只是填充。

相關問題