2012-07-24 33 views
2

我想在服务器上的数据库中存储一些密码。在数据库中存储密码的首选可恢复方法

密码应该是可恢复的,因为我想将它们用于需要密码的第三方api。 (所以我不能使用像md5这样的单向方法......)

什么是在数据库中保存密码的最佳方法?没有比存储纯文本更好的方法吗?

+0

您可以加密它们,但这只会将问题转移到存储主密钥。 – CodesInChaos 2012-07-24 17:04:44

+0

并将主密钥放在另一个数据库上,以避免SQL注入攻击,也许? – 2012-07-24 17:05:21

+0

md5是一种破损的单向方法...仅用于记录。 – 2012-07-24 17:05:26

回答

2

AES是密码合理的,可能是为新应用程序选择的最常见的加密(而不是哈希)机制。

注意为您加密的每个密码生成一个随机初始化向量(IV),并将密钥和IV分别存储在加密密码字节中。

了解AES和Rijndael算法之间的差异退房

http://blogs.msdn.com/b/shawnfa/archive/2006/10/09/the-differences-between-rijndael-and-aes.aspx

有与官方FIPS-197规范AES

您应使用唯一的Rijndael之间存在一些差异IV每个用户。但是,存储每个用户的密钥会导致一个复杂的密钥管理场景。我会建议一个关键的应用程序和一个IV用户。

IV可以和密文一起保存。密钥应该存储在数据库之外。

您可以将加密的密钥存储在web.config中。见this

+0

我应该为每个用户使用一个唯一的密钥和IV吗? – 2012-07-24 17:09:55

+0

您应该为每个用户使用一个独特的IV。但是,存储每个用户的密钥会导致一个复杂的密钥管理场景。我会建议一个关键的应用程序和一个IV用户。 – 2012-07-24 17:11:11

+0

与密文分开存储IV是不寻常的。将IV添加到密文是标准的。 – CodesInChaos 2012-07-24 17:11:58