问题
我正在用 python 编写一个应用程序。它负责处理关于一个人的联系人和其他信息。每次他/她想要执行主要操作时,我都想提示用户输入主 key 。我已经想通了一切。整个应用程序已准备就绪并且运行良好。但是我将主 key 存储在一个文件中。该文件以纯文本形式易于阅读。我尝试使用此软件的 friend 说,如果我不应用强大的加密算法,该软件将毫无用处,因为用户会简单地信任具有很容易被窃取的详细信息的应用程序。
目标
以只能由我的程序破译(或读取)的形式存储主 key 。
其他事情
- 用户可以选择更改主 key 。
- 主 key 只会被读取和解密一次。在程序的开始。然后它将存储在一个变量中,并从该变量中使用。
- 它是一个 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/