如何为以后的CLI调用存储密码

时间:2019-04-15 11:18:03

标签: python passwords environment-variables credentials

我正在使用python编写CLI,该CLI几乎包裹了网站的API。该API有身份验证,因此我需要询问用户其用户名和密码。我不确定如何将它们存储在系统中而不将它们以明文形式保存在某个地方。是否有针对此类情况的最佳做法?

例如,用户可以从命令行调用:

python some_cli.py

这将提示他们输入用户名和密码(如果尚未保存)。我曾考虑过尝试使用os.putenvos.environ保存它们,但是不会保存,因为此过程将会终止,并且也不会保存以备将来使用。我唯一能想到的就是拥有一个文件,该信息将被保存并从中读取。

2 个答案:

答案 0 :(得分:1)

使用用户输入的凭据登录到要包装的Web API。 API应该返回令牌或会话,就像您在浏览器中使用令牌或会话一样。将此令牌或会话作为变量存储在CLI程序中的某个位置,或将其存储在文件中。这将需要保留为纯文本。每个CLI实例在运行时都可以使用此文件向API发出请求。您还需要通过询问用户的凭据来重新认证来处理过期的会话/令牌。

答案 1 :(得分:0)

通常,在将密码存储在系统硬盘上之前先对其加盐并对其进行哈希处理。在我看来,您好像在编写客户端密码存储脚本。因此,我建议使用SHA-2bcrypt哈希算法,以使密码在存储之前难以理解。请勿使用MD5SHA-1来散列密码,因为它们具有已知漏洞。

比较用户提供的密码和真实密码时,不会以明文形式比较它们。用户提供的密码首先被加密,然后被散列。将所得的哈希与存储在磁盘上的“正确”密码的哈希进行比较。使用此方法,纯文本密码永远不会存储在磁盘上。此外,由于两个哈希匹配的可能性极低,因此,与存储纯文本密码相比,这被认为是一种更安全的做法(一种非常安全的做法,因为即使攻击者知道哈希,哈希也很难逆转)。

该线程有一些有趣的盐化和哈希实现,包括bcrypt实现。 Salt and hash a password in python

secure password storage tutorial可能会为您的旅途提供帮助。

请记住,加密技术有其弱点。切换到密码密码存储时,必须了解Rainbow表攻击,定时攻击和已知的纯文本攻击。话虽如此,密码学是众所周知的提供良好安全性的领域。

我建议您加入Stack Exchange's Cryptography Forum