加密/解密字符串的最佳算法&密钥存储方法

时间:2011-07-21 18:41:02

标签: encryption coldfusion

不建议以纯文本格式存储数据库中的电子邮件地址,因此我想找出执行此操作的最佳算法。选项包括:

(来自文档)

  • 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 个答案:

答案 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〜