【问题标题】:Python best way to encrypt password in clear filePython在明文文件中加密密码的最佳方法
【发布时间】:2019-06-22 18:53:28
【问题描述】:

我正在寻找一种从用户那里获取密码但具有良好安全性的方法。

目前,我将用户密码写​​入yaml 文件中:

---
app:
  username: tata
  password: toto

用python的代码:

 url = http://application.com
 username = Cfg.get(['app', 'username'])
 password = Cfg.get(['app', 'password'])
 auth = Appli(url, username, password)

但不是很干净,我不想用base64函数加密到base64

【问题讨论】:

  • 如果您考虑 base64 “加密”,您不妨以纯文本形式编写...在关注如何在 python 中实现之前,先查找适当的凭据管理(这主要与语言无关,顺便说一句) .
  • 密码应该加盐和散列(使用慢散列函数),而不是加密。
  • 考虑研究类似pypi.org/project/cryptography

标签: python encryption passwords


【解决方案1】:

有很多 pythonic 方法可以做到这一点。 您还可以仅将密码存储在数据库级别,例如 SHA1md5SHA256 等。

当用户输入他/她的密码时,系统应将其转换为哈希(您选择的哈希算法),然后与数据库的密码进行检查输入的密码是否正确。

import hashlib

url = http://application.com
username = Cfg.get(['app', 'username'])

password= Cfg.get(['app', 'password'])

#store pass_hash in the database
pass_hash= hashlib.sha256(password.encode()).hexdigest()

#authenticate using pass_hash not the actual textual password
auth = Appli(url, username, pass_hash)

在这种情况下,即使您的数据库暴露给外部人员,您的实际密码也是安全的,只有哈希值是可见的。

【讨论】:

  • 我没有数据库来存储密码
  • 如果您现在还没有数据库也没关系,只要您存储并使用pass_hash 而非password 进行身份验证。请确保您暂时将pass_hashs 和usernames 关联存储。
【解决方案2】:

不太清楚你要解决什么问题。

您可以使用pycrypto 来加密或解密您的数据,任何现代算法都可以。真正的问题是,如果您需要以编程方式访问加密数据,您应该如何存储密钥。存储加密数据+密钥真的能解决你的安全问题吗?

旁注:您可能会发现this old blog post 很有用

【讨论】:

  • 是的,确实,我正在寻找一种存储密钥的方法,加盐和散列可能是一个好方法
猜你喜欢
  • 2011-01-30
  • 2013-04-17
  • 2011-05-20
  • 2021-01-08
  • 2016-06-30
  • 2020-11-30
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
相关资源
最近更新 更多