不建议以纯文本格式存储数据库中的电子邮件地址,因此我想找出执行此操作的最佳算法。选项包括:
(来自文档)
CFMX_COMPAT:ColdFusion MX和之前版本中使用的算法。此算法是最不安全的选项(默认)。
AES:美国国家标准与技术研究院(NIST)FIPS-197规定的高级加密标准。
BLOWFISH:Bruce Schneier定义的Blowfish算法。
DES:由NIST FIPS-46-3定义的数据加密标准算法。
DESEDE:由NIST FIPS-46-3定义的“Triple DES”算法。
另一个问题是密钥应存放在何处?在数据库或源代码中?它会被加密吗?如果它将被加密,那么问题就是如何存储将加密密钥的密钥。
如果它存储在源代码中,无源分发会不会很好?
答案 0 :(得分:7)
我会使用AES。它是列出的最快和最强的。
至于存储密钥的位置,即64,000美元的问题。您不应该将它放在数据库中(至少不是与用于加密的数据在同一个数据库中)或源代码中。
密钥管理是一个主题的野兽。 NIST有数百页关于如何做到这一点的文档。
http://csrc.nist.gov/groups/ST/toolkit/key_management.html
密钥管理涉及密钥的正确生成,交换,存储,轮换和销毁。你不应该永远使用相同的密钥(一个非常常见的错误),也不应该不正确地存储它。
您应该查看NIST指南并确定适合您的策略,并根据其敏感度充分保护您的数据。
答案 1 :(得分:0)
使用AES或DESEDE - 它们非常强大,根据我的经验,如果您出于某种原因需要移植此信息,则会有很多广泛的兼容性。
至于密钥,这不是真正的关键数据。通常,您可以使用该数据的唯一信息(如userId)和私钥(salt)(如代码库中的常量)创建一个compsite密钥:
全局设置/常量中的某处:
<cfset myCodeBaseKey = "NateIsAwesome">
然后当你准备好加密时:
<cfset myKey = hash(myCodeBaseKey & user.userId, "SHA")>
P.S。如果你使用我听到的确切的盐词,它会更好。 :P〜