python - 加密——怎么做

标签 python encryption tkinter

问题

我正在用 python 编写一个应用程序。它负责处理关于一个人的联系人和其他信息。每次他/她想要执行主要操作时,我都想提示用户输入主 key 。我已经想通了一切。整个应用程序已准备就绪并且运行良好。但是我将主 key 存储在一个文件中。该文件以纯文本形式易于阅读。我尝试使用此软件的 friend 说,如果我不应用强大的加密算法,该软件将毫无用处,因为用户会简单地信任具有很容易被窃取的详细信息的应用程序。

目标

以只能由我的程序破译(或读取)的形式存储主 key 。

其他事情

  1. 用户可以选择更改主 key 。
  2. 主 key 只会被读取和解密一次。在程序的开始。然后它将存储在一个变量中,并从该变量中使用。
  3. 它是一个 GUI 应用程序。我正在使用 python Tkinter。

详情

请注意,数据是使用另一种加密方式存储的,这种加密方式并非牢不可破,但足以容纳此类信息。

我没有使用任何数据库来存储信息。

唯一要加密的数据是主 key 。它是长度为 7 到 80 个字符的字母数字字符串。

规范

1. Python 2.7
2. Tkinter 8.5
3. Linux Mint 14

最佳答案

您不需要,甚至不需要复杂的密码加密——您所描述的是密码,而不是 key (它只授予访问权限,不加密数据)。当前的最佳做法是存储加盐和散列的密码。也就是说,当用户创建一个新帐户并输入密码时,您会根据密码、用户名和“salt”构建一个字符串(这只是一个对您网站上的每个人都相同的小字符串——这是为了阻止彩虹 table 攻击)。然后你通过一个好的散列算法运行该字符串——像 SHA1 这样的算法就可以了(即使 MD5 也绰绰有余,尽管有相反的报道)。您当然不需要像 AES 这样的东西。不管怎样,既然你有一个散列,你将散列存储在数据库中,而不是密码。如果其余部分不正确,即使像 AES 这样的强密码也毫无用处。

下次用户登录时,您执行相同的操作:将他的密码添加到用户名和盐中,对其进行哈希处理,然后将哈希值与存储的内容进行比较。即使在原则上,您也无法知道他的密码是什么,因此即使攻击者获取了您的数据库并知道您的算法和 salt,也无法找到它。

关于python - 加密——怎么做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16142113/

相关文章:

python - 在 Django-REST-framework 中对 ModelViewSet 使用 defaultRouter() 时出现错误的重定向

cryptography - Crypto++ AES 解密如何?

c# - 如何在两个不同的 .NET Core 应用程序之间共享加密数据?

python - 我在这里做错了什么?~~Python 中的 Tkinter

python - 为什么我在 Django 中收到 "MySQL server has gone away"异常?

python - 如何删除数据框中冒号之前的所有内容

python - Pandas 从日期获取年龄(例如 : date of birth)

algorithm - 一种只能与原始算法进行比较的哈希算法

python - 如何在Python中使整个窗口居中?

python - TKInter - 标签中的文本改变窗口的宽度