【问题标题】:Python Crypt Import Linux SaltPython Crypt 导入 Linux Salt
【发布时间】:2013-10-01 23:12:40
【问题描述】:

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

这行得通:

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

这不是:

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

我正在尝试将加盐字与固定密码进行比较,但无法使用更高级的盐。有什么想法吗?

【问题讨论】:

  • 请向我们展示一个完整的示例来说明问题。 print(zebra) 当然会返回 None,因为这是 print 总是 返回的……但它会将 $1d2n7Q0.r54s 打印到标准输出。
  • 试图解释得更清楚
  • @blankwall 你确定你没有使用其他变量或其他东西而不是字符串“密码”和“$1\$WDvKY5n\$”吗?在这里它工作得很好
  • 这正是我正在使用的内容,我将在最后对其进行更多研究。感谢您的帮助

标签: python crypt


【解决方案1】:

这是无效的盐。

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-09-05
    • 2011-01-12
    • 2014-12-16
    • 2018-10-17
    • 1970-01-01
    • 2010-11-09
    • 2014-06-27
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多