我正在开发一个LAMP(erl)堆栈,并知道几种存储模糊密码的方法.鉴于MySQL 4.1.1和Perl 5.8,我想听听那些认为他们有最佳实践的人,以及为什么它是最好的原因.
我读过的一个选项,使用MySQL ENCODE()和DECODE()函数,对我来说听起来不错......你的想法?
通常,我更喜欢将密码保留为无法恢复的哈希值,而不是可以解密的加密项.
通过从访问者提供的字符串计算哈希值(当然还有一些盐),我可以判断用户是否提供了两次相同的密码,而没有允许我的应用程序能够解密提供的密码的安全风险,可能是恶意的.
我的感觉是,当您希望数据可以恢复时,encode()和decode()可能是很好的解决方案,但是不可恢复的哈希(使用Crypt :: MD5)是存储密码的更好方法.
我认为使用SHA-256这样的哈希函数的salted哈希是最好的.可逆的密码不如那些无法逆转的密码安全.如果没有外部Perl模块,您可以使用内置的SHA1()函数,不如SHA256,但优于ENCODE/DECODE.
此外,您必须考虑从代码到数据库的路径,这可以被嗅探.您可以通过代码中的散列或加密数据库连接来避免这种风险.最好在代码中执行此操作,因为即使加密连接,仍然存在配置查询日志的风险,从而在某处的日志文件中存储明文.
如果您只需要密码来验证自己/用户,那么单向存储(如md5)会更好.