我有一个情况,必须存储密码,因为我正在构建一个系统来连接另一个系统。这个其他系统只允许单个用户帐户,并且唯一连接它的方式是通过密码。散列在此处不合适。我必须以一种可以检索它的方式存储密码。
现在,知道这不是完美的系统后,我正在尝试限制如果某人以某种方式访问数据库会造成的损害。由于这个数据库需要被不同的平台使用,我决定使用MySQL内置的加密函数。这样,我就不需要担心为各种语言和系统寻找兼容的加密/解密算法实现。我可以在查询中使用MySQL的函数。
存储密码时,我将使用。然后我意识到我应该使用一些盐,这样如果他们能够得到一个密码,要获得其他密码会更难。但是等等!有什么意义吗?如果他们能够得到一个密码,他们必须有加密密钥,对吗?
此外,这是一个块密码。在某些情况下,盐可能几乎无用。
现在,知道这不是完美的系统后,我正在尝试限制如果某人以某种方式访问数据库会造成的损害。由于这个数据库需要被不同的平台使用,我决定使用MySQL内置的加密函数。这样,我就不需要担心为各种语言和系统寻找兼容的加密/解密算法实现。我可以在查询中使用MySQL的函数。
存储密码时,我将使用。然后我意识到我应该使用一些盐,这样如果他们能够得到一个密码,要获得其他密码会更难。但是等等!有什么意义吗?如果他们能够得到一个密码,他们必须有加密密钥,对吗?
此外,这是一个块密码。在某些情况下,盐可能几乎无用。
/* Returns 8CBAB2A9260975FF965E5A7B02E213628CBAB2A9260975FF965E5A7B02E21362FBB5D173CBAFA44DC406B69D05A2072C */
SELECT HEX(AES_ENCRYPT("passwordpasswordpasswordpassword", "encryption key"));
/* Returns 8CBAB2A9260975FF965E5A7B02E213628CBAB2A9260975FF965E5A7B02E21362C49AF8D5B194770E64FEF88767206391 */
SELECT HEX(AES_ENCRYPT("passwordpasswordpasswordpassworda", "encryption key"));
我的问题
我是否正确地认为,在像我这样的情况下使用对称加密时,没有理由使用盐?
考虑到我必须以一种允许我检索原始值的方式存储密码,我是否应该考虑其他任何方法?(我知道我需要小心加密密钥的存储位置和方式,并且我需要保护我的 MySQL 日志。)