无法让隐窝为我的Ubuntu盐工作。我可以使用任意盐来运行它,但是使用特殊盐则不会。任何帮助表示赞赏。
这有效:
cryptWord = crypt.crypt('word', "HX")
print cryptWord
#prints salted word
这不是:
zebra = crypt.crypt('password', "$1\$WDvKY5n\$")
print zebra
# prints None
我正在努力将咸味的单词与预定的密码进行比较,但我无法使用更高级的盐。有什么想法吗?
答案 0 :(得分:2)
这是无效的盐。
尽管the documentation没有这么说,the source表明如果底层C函数返回NULL,crypt.crypt
将返回None
。 POSIX允许它这样做,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值,其余的盐只是填充。