2011-07-21 94 views
0

不建议以纯文本形式将数据库中的电子邮件地址存储在数据库中,所以我想找出实现此目的的最佳算法。选项有:加密/解密字符串和密钥存储方法的最佳算法

(从文档)

  • CFMX_COMPAT:在ColdFusion MX的和之前的版本中使用的算法。该算法是最不安全的选项(默认)。

  • AES:由美国国家标准与技术研究院(NIST)FIPS-197指定的高级加密标准。

  • BLOWFISH:由Bruce Schneier定义的Blowfish算法。

  • DES:由NIST FIPS-46-3定义的数据加密标准算法。

  • DESEDE:由NIST FIPS-46-3定义的“Triple DES”算法。

另一个问题是密钥的存储位置?在数据库中还是在源代码中?它会被加密吗?如果它将被加密,那么这个问题会引发加密密钥的密钥的存储方式。

它应该存储在源代码中,将无源分布是好的吗?

+2

我很好奇你为什么认为用明文存储电子邮件地址是不明智的。 –

+1

我同意,确保你不只是货物的理由,它不适合。 –

+0

这是为了隐私。如果安全性被破坏,至少他们在获得加密数据之前必须破解另一层。请阅读以下内容:http://bit.ly/pkrOG0 http://tgr.ph/nneofZ http://bit.ly/lYdU03 http://bit.ly/nVm3EX –

回答

7

我会使用AES。这是所列出的最强和最强的。

至于在哪里存储密钥,那就是$ 64,000的问题。你不应该把它放在数据库中(至少不要与它用于加密的数据在同一个数据库中),也不要放在你的源代码中。

密钥管理是一个话题的怪物。 NIST有数百页的文件说明如何做到这一点。

http://csrc.nist.gov/groups/ST/toolkit/key_management.html

密钥管理涉及到恰当generaton,交换,存储,旋转,按键的破坏。你不应该永远使用相同的密钥(一个非常常见的错误),也不应该存储它不正确。

您应该查看NIST指南并确定适合您的策略,并根据其敏感性充分保护您的数据。

0

使用AES或DESEDE - 它们很强大,根据我的经验,如果您因某种原因需要移植此信息,则它们具有很大的兼容性。

至于关键,这不是真正的关键数据。通常情况下,您需要从该数据的独特信息(如userId)和私钥(salt)(如代码库中的常量)中创建一个compsite密钥:

您的全局设置/常量中的某处:

<cfset myCodeBaseKey = "NateIsAwesome"> 

然后,当你准备好要加密:

<cfset myKey = hash(myCodeBaseKey & user.userId, "SHA")> 

诗如果你使用我听到的确切的盐词组,它会更好。 :P〜

+0

因为我认为这是可怕的建议,因此被拒绝投票。说钥匙不重要不仅是错误的,它与事实完全相反。密钥是密码系统中最重要的部分(假设一个强大的算法)。而使用非随机的,容易推断的密钥是一个可怕的想法。 –

+0

密钥是一个独特的信息和私钥的哈希组合 - 不容易推断或颠倒。此外,您误解了“这不是关键数据”的陈述 - 这是指被保护的数据是电子邮件地址。 – Nate

+0

“轻松推理”意思是说,如果你知道如何创建一个,你就知道如何创建它们。独特!=随机。我很抱歉,我误解了你的重要数据的含义,我同意电子邮件地址不是关键数据,但如果有人要去加密某些东西的麻烦,那么使用弱密钥就没有意义一。 –