如何为将来的CLI调用存储密码

问题描述 投票:0回答:2

我正在使用python编写一个CLI,它几乎围绕着一个网站的API。有API的身份验证,所以我需要询问用户他们的用户名和密码。我不确定如何将这些存储在系统上而不将它们保存在明文的某个地方。这样的事情有最好的做法吗?

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

python some_cli.py

如果尚未保存,这将提示他们输入用户名和密码。我想过尝试用os.putenvos.environ保存它们,但是由于这个过程会死掉而且这些将不会保存用于将来的过程,因此不会保存。我唯一能想到的是有一个文件,这些信息将被保存和读取。

python passwords environment-variables credentials
2个回答
1
投票

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


0
投票

通常,密码在存储在系统硬盘上之前会被加盐和散列。听起来好像你正在编写一个客户端密码存储脚本。因此,我建议使用SHA-2bcrypt哈希算法,以便在存储密码之前使密码难以理解。不要使用MD5SHA-1来填充密码,因为它们已知漏洞。

当比较用户提供的密码和真实密码时,不会以明文比较它们。用户提供的密码首先被盐化,然后散列。将生成的散列与存储在磁盘上的“正确”密码的散列进行比较。使用此方法,明文密码永远不会存储在磁盘上。此外,由于两个哈希匹配的概率非常低,因此它被认为比存储明文密码更安全(更安全的做法,因为即使攻击者知道哈希值,哈希也很难反转)。

这个线程有一些有趣的salting和散列实现,包括bcrypt实现。 Salt and hash a password in python

secure password storage tutorial可以帮助您完成旅程。

请记住,密码学有其缺点。当切换到加密密码存储时,必须理解彩虹表攻击,定时攻击和已知的明文攻击。话虽如此,密码学是一个备受尊重的领域,已知可提供良好的安全性。

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

© www.soinside.com 2019 - 2024. All rights reserved.