2010-07-31 46 views
0

我正在开发一个庞大的项目。我一直在努力研究它,并决定在软件处理数据的方式上“提高”安全性。我已经知道如何使用DES加密来加密和解密数据字符串,但我不确定的是将加密数据放在哪里。我想将所有内容都存储在MySQL数据库中,但还没有弄清楚如何使用数据库。我做了一些谷歌搜索,但没有占上风。使用Python在MySQL数据库中存储信息

我需要存储每个帐户的以下内容:

用户名
密码
秒。问题
Sec。答
电子邮件
关键字列表网址时

我想存储该信息会像在数据库中创建表,但我不知道的
名单。也许是用户的表格,然后为表格中的其他用户留下更多的表格?我不确定如何使用Python的MySQL数据库,所以任何帮助将不胜感激。

对不起后期编辑,我只是​​意识到我需要清理它一点。

+1

请哈希,不要加密密码,并在此哈希。 – icktoofay 2010-07-31 03:20:58

+0

使用MD5?我听说这很好,但不可解密。我需要能够再次读取原始数据,以获得密码恢复功能。 – 2010-07-31 03:23:18

+1

您可以通过http://www.google.com/search?q=python+mysql+tutorial找到大量优秀的Python + MySQL教程 - 您是否看过其中的一些,以及缺少什么你去吗? – 2010-07-31 03:23:59

回答

2

这里的模式可能是什么样子的例子:

user 
    user_id (PK) 
    username (char) 
    password (char) 
    security_question_id (FK) 
    security_answer (char) 
    email_address (char) 

security_question 
    security_question_id (PK) 
    question (char) 

keyword 
    keyword_id (PK) 
    keyword (char) 

user_keyword 
    user_keyword_id (PK) 
    user_id (FK) 
    keyword_id (FK) 

url 
    url_id (PK) 
    user_id (FK) 
    url (char) 

PK = Primary Key 
FK = Foreign Key 
char = varchar of some max length that you define 

假设:

  • 有可供选择的安全问题标准列表。
  • 很多用户可能有相同的关键字,所以他们被放在他们自己的表中。
  • URLs更独特,所以只需将url和user_id存储在一起。如果你愿意,你可以改变这个关键字使用的共享模式。
  • 没有可以为空,所有字段都是必需的。

正如我所评论的,我建议使用密码(带盐)。不需要恢复,他们可以重置密码。我模仿Django的密码风格过去:

sha1$8ac10f$a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 

这就是:散列法,盐和密码哈希,由$字符分隔。你可以生成一个随机字符串作为盐。在散列之前将其添加到密码。存储密码字段中显示的字符串。要测试密码的正确性,请提取这3个字段,将salt附加到用户输入的密码,应用散列并与数据库中的散列(第3个字段)进行比较。如果它们匹配,则密码是正确的。

我会亲自使用SQLAlchemy。

+0

我感谢你的努力,我知道把这个帖子,但我仍然不知道如何把这已成为工作代码。我一直在阅读关于使用MySQLdb模块的小教程,http://www.kitebird.com/articles/pydbapi.html#TOC_1,但到目前为止,我不是我需要的地方。 – 2010-07-31 03:44:03

+0

你需要把问题分解成更小的问题,我们不能只为你写代码 – FogleBird 2010-07-31 16:15:39

+0

好的,他重新是我的主要问题。我发现了一些关于如何使用MySQLdb模块的优秀教程,但是当试图导入模块时,它说它找不到 _mysql模块。我做了一些谷歌搜索,但似乎无法找到该文件。有任何想法吗?现在,就密码加密而言,我使用的是DES,这是不是很好? – 2010-08-01 19:22:08

0

你有两个选择,主要有:

你知道如何使一个表中,一般?

对于MySQL,你会通过登录,创建一个数据库,选择(使用)该数据库,然后

create table account(
    username varchar(32), 
    password varchar(128), 
    sec_question varchar(512), 
    sec_answer varchar(128), 
    email_address varchar(128) 
    ); 

列表或URL和关键字,让您的例子DB将作为单独的表中做得最好,尽管描述超出了这个答案的范围!

请注意,这不是一个完整的或最好的方式来做你的表必须的,而不是你可能用ORM创建它的方式,但只是一个例子。

要创建一个安全可靠的密码系统,您需要对此进行大量的研究。我相信这里的人会很乐意帮助你理解哈希等。

这是关于使用MySQLdb模块的l ink to a good article

相关问题