0

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

这有效:

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

这不会:

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

我试图能够将加盐字与固定密码进行比较,但无法使用更高级的盐。有任何想法吗?

4

1 回答 1

3

这是无效的盐。

尽管文档没有这么说,但源清楚地表明,如果底层 C 函数返回 NULL ,crypt.crypt它将返回。POSIX允许这样做,而linux/glibc在给定无效盐时会明确这样做。None

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

如果您阅读手册页上的“Glibc 注释”部分,该字符串$1\$WDvKY5n\$1\用作其加密方法 ID。有 id 的加密方法1,但没有 id 1\。另外,盐本身是WDvKY5n\,但盐只允许在集合中包含字符[a-zA-Z0-9/]

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

如果这是出了问题,只需使用$1$WDvKY5n$,一切都会好起来的。

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

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

于 2013-10-02T18:03:49.173 回答