Python Crypt导入Linux Salt

时间:2013-10-01 23:12:41

标签: python crypt

无法让隐窝为我的Ubuntu盐工作。我可以使用任意盐来运行它,但是使用特殊盐则不会。任何帮助表示赞赏。

这有效:

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

这不是:

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

我正在努力将咸味的单词与预定的密码进行比较,但我无法使用更高级的盐。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这是无效的盐。

尽管the documentation没有这么说,the source表明如果底层C函数返回NULL,crypt.crypt将返回NonePOSIX允许它这样做,linux/glibc在给出无效盐时明确地这样做。

那么,这种盐有什么问题?

如果您阅读联机帮助页上的“Glibc notes”部分,则字符串$1\$WDvKY5n\$将使用1\作为其加密方法ID。有一个标识为1的加密方法,但没有标识为1\的加密方法。此外,盐本身为WDvKY5n\,但盐只允许包含集[a-zA-Z0-9/]中的字符。

最有可能的是,您以某种方式打印出盐导致$字符被转义(对于shell?),然后复制并粘贴转义版本而不是实际字符串。

如果出现问题,只需使用$1$WDvKY5n$,一切都会好的。

如果出现其他问题并且盐是不可逆转的乱码,只需正确查找并使用您发现的任何内容。

同时,这对其他平台上的人(返回'$1d2n7Q0.r54s'而不是None)起作用的原因是BSD和FreeSec crypt(除了linux之外的大多数POSIX平台上的库存实现)两个不以下划线开头的盐都是传统的密码值,前两个字符可以是任何ASCII值,其余的盐只是填充。