如何在Windows上实现python-keyring?

时间:2013-02-07 16:44:17

标签: python windows security python-keyring

python-keyring如何在Windows上提供安全性?

在Linux上的GNOME / KDE中,系统会提示用户输入密码以授权每个应用程序访问密钥环。

在Windows中,当应用程序访问密钥环时,没有此类提示。是什么阻止随机python应用程序通过运行

从密钥环中检索密码
import keyring
get_password(service, username)

如何实施用户同意?整个概念,至少在Windows中,基于所有已安装的程序都是“可信”的假设?

3 个答案:

答案 0 :(得分:8)

稍微研究一下,密码似乎存储在Windows Credential Vault中,这相当于Gnome或KDE密钥环。您可以通过打开Windows Credential Manager实际查看已存储的内容。我只需从开始屏幕在Windows 8.1上键入Credential Manager即可到达那里,但我认为您也可以从用户帐户页面访问它。

无论如何,正如您从附加图片中看到的那样,我作为测试添加到密钥环的密码显示在Windows Credentials -> Generic Credentials -> {{ 1}}。打开此窗口,因为PC上的另一个用户没有显示此密码,因此它似乎可以从其他用户获得保护。此屏幕还允许您撤消或更改密码。

Windows credential manager

至于如何实施同意,我相信只要您的Windows用户帐户已登录,keyring_demo就会运行,但我不知道具体细节。

答案 1 :(得分:0)

cedential manager方法有效,但在我的情况下添加:

  • 互联网或网络广告“myPassGroup”
  • 用户名“pass1”
  • 密码“xxx”

然后使用相同的网络地址添加另一个条目

  • internet或netwokr地址“myPassGroup”
  • 用户名“pass2”
  • 密码“xxx”

pass2将 OVERRIDE frist条目pass1! 这是一个主要的回归,因为“互联网或网络地址” 作为密钥环中的组名,我需要输入多个密码 同名

我的解决方案是使用python命令直接

  • 在Windows中打开CMD
  • 类型Python
  • 然后输入import keyring
  • 然后输入keyring.set_password(“groupName”,“passKey”,“password”)
  • 然后输入keyring.set_password(“groupName”,“passKey2”,“password2”)

您可以通过

验证结果
  • keying.get_password(“groupname”,“passKey”)
  • keying.get_password(“groupname”,“passKey2”)

我知道这会有效,但仍然很难找到实际数据的位置 已保存

我使用以下命令尝试找出

  • python -c“import keyring.util.platform_; print(keyring.util.platform_.config_root())”

  • python -c“import keyring.util.platform_; print(keyring.util.platform_.data_root())”

我的情况下的data_root是“C:\ Users \ JunchenLiu \ AppData \ Local \ Python Keyring” 我检查了文件夹,它不存在...它必须保存在某个地方。也许有人可以搞清楚。

但我的解决方案应该在Windows上完美运行

答案 2 :(得分:-4)

from keyring.backend import KeyringBackend

class SimpleKeyring(KeyringBackend):
    """Simple Keyring is a keyring which can store only one
    password in memory.
    """
    def __init__(self):
        self.password = ''

    def supported(self):
        return 0

    def get_password(self, service, username):
        return self.password

    def set_password(self, service, username, password):
        self.password = password
        return 0

    def delete_password(self, service, username):
        self.password = None