首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用etc/Shadow的Python

使用etc/Shadow的Python
EN

Stack Overflow用户
提问于 2013-08-08 01:48:59
回答 3查看 3K关注 0票数 0

因此,我正在编写这个程序,它需要检查etc/shadow中的密码散列,并将其与用户输入的密码进行比较。我试着用hashlib.sha512加密密码,但结果不一样。我想它是怎么加盐的,但我不知道它是否使用了通用的盐,也不知道我如何每次都能得到盐。

我需要一种让用户输入密码的方法,然后让程序对其进行哈希处理,并根据etc/shadow进行检查。有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2013-08-08 01:54:49

试试这个https://pypi.python.org/pypi/pam。第一个链接在谷歌的python pam。如果存在,请查看python-pam的发行包管理器。否则,使用pipeasy_install进行安装。

小示例:

代码语言:javascript
复制
>>> import pam
>>> pam.authenticate('fred', 'fredspassword')
False
票数 4
EN

Stack Overflow用户

发布于 2014-12-04 06:18:51

代码语言:javascript
复制
>>> import crypt
>>> line = 'bob:$1$qda8YAO9$rBiov9uVJlH1/97cbcyEt.:15965:0:99999:7:::'
>>> encript = line.split(':')[1]
>>> encript
--> '$1$qda8YAO9$rBiov9uVJlH1/97cbcyEt.'

>>> i = encript.rfind('$')
>>> salt = encript[:i]
>>> salt
--> '$1$qda8YAO9'

>>> crypt.crypt('bob_password',salt)
--> '$1$qda8YAO9$rBiov9uVJlH1/97cbcyEt.'
>>> encript
--> '$1$qda8YAO9$rBiov9uVJlH1/97cbcyEt.'
票数 3
EN

Stack Overflow用户

发布于 2013-08-08 02:34:18

passwd字段不仅仅是密码的SHA-512哈希。*

这在crypt manpage中有解释。格式为$id$salt$hash,其中id指定散列方法(1用于MD5,2a用于Blowfish,5用于SHA-256,6用于SHA-512),salt指定与该算法一起使用的盐,hash指定结果。

正如手册页所暗示的那样,您实际上可以将整个$id$salt$传递给crypt函数,而不是salt,它将自动使用适当的算法。比方说,通过ctypes,这并不难做到。

无论如何,你所做的几乎肯定是一个坏主意。您需要以root身份运行才能访问/etc/shadow,如果您真的想验证用户是否可以登录,那么您需要模拟的不仅仅是密码验证,当然,您还需要处理安全输入,并确保密码不会以明文形式保存在某个地方等等。让PAM为你做这件事要简单得多,也更安全。

*我相信从理论上讲,它可以是-如果它不是以$开头,它就会被解释为某种遗留格式的…这可能意味着它被解释为使用DES算法的POSIX crypt

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18110250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档