python,从影子中获取加密的用户密码

标签 python crypt pwd

我正在尝试获取加密的系统用户密码,以便将其与另一个 sha512 加密的密码进行比较。我试过 pwd,但似乎这个模块不处理用户密码,或者使用的系统对它来说“太现代了”(debian 挤压)。这是我得到的:

import pwd
username = 'root' #or another user
pwd_struct = pwd.getpwnam(username)
print pwd_struct

>>>pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')

其中 pw_passwd='x' 而不是 sha512 字符串。

打算将其与 python crypt 模块(example here)一起使用时,我得到了异常“抱歉,当前不支持影子密码”,这是正常的,因为我的 pw_passwd = 'x'。

是否有另一种正确的方法来获取散列密码,或者我应该为/etc/shadow 编写我自己的解析器?

最佳答案

试试 spwd module

平台:Unix

2.5 版的新内容。

此模块提供对 Unix 影子密码数据库的访问。它适用于各种 Unix 版本。

您必须有足够的权限才能访问影子密码数据库(这通常意味着您必须是根用户)。

影子密码数据库条目被报告为类似元组的对象,其属性对应于 spwd 结构的成员(下面的属性字段,请参见):

>>> import spwd
>>> spwd.getspnam('root')
spwd.struct_spwd(sp_nam='root', sp_pwd='!', sp_lstchg=15238, sp_min=0, sp_max=99999, sp_warn=7, sp_inact=-1, sp_expire=-1, sp_flag=-1)

请记住,您需要拥有 /etc/shadow 的读取权限才能正常工作

关于python,从影子中获取加密的用户密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13552520/

相关文章:

python - 来自 CSV 的嵌套 JSON

Docker COPY 没有这样的文件或目录

pwd - 为什么 iget() 隐藏在 xv6 中

python - 如何在 Scons site_tools 中找到绝对路径

python - Python 是否错误地处理了这个 "arbitrary precision integer"?

c++ - 我如何使用 cryptimportkey 函数导入私钥来加密数据相同的结果使用导入的 key

c# - 如何在C#中使用 "libtomcrypt"

php - 在 PHP 中正确使用带有 SHA512 的 crypt()

javascript - 获取执行 node.js 的目录

python - 我正在尝试用python制作剪刀石头布游戏,但出现缩进不匹配任何外部缩进杠杆错误的情况