可能重复:
使用PHP加密和解密的最佳方式?
对于我的项目,我想以加密格式存储密码,
所以我使用md5('password')
存储了它,但我的项目要求是我们应该能够解密密码,正如大家所知,我们不能解密md5加密的字符串。
所以我选择了使用CCD_ 2对其进行编码并使用base64_decode('encodedpassword')
对其进行解码。
但我想知道使用base64_encode
是一种最佳实践吗?或者PHP还有其他加密解密技术吗?
首先,md5('password')
不是加密。哈希数据后,无法恢复原始密码。技术读者注意:暴力攻击也不会恢复密码,因为有有限数量的哈希和无限数量的不同字符串。
现在,base64_encode('password')
是,也不是加密,除非可能是在这个词最松散的意义上。任何人都可以查看Base64文本并恢复原始密码。
众所周知,加密由明文和某种私钥组成。加密算法的一个例子是AES-256("Rijndael"是赢得AES竞赛的算法的名称,因此也是标题)。AES-256使用256位密钥,并且在正确实现时通常被认为是非常安全的。
密码学不是一个应该轻易讨论的话题。要想纠正错误是极其困难的,如果不纠正,后果会非常严重,尽管这似乎是矛盾的,既微妙又严重。
您应该非常仔细地评估是否需要能够恢复密码。在99.9999999%的情况下,答案是"否"。事实上,我想不出密码的明文对你有什么影响。
评估完是否需要恢复密码后,决定不需要恢复密码。
在这一步之后,如果您仍然认为需要恢复密码,请查看已经编写的PHP加密库。OpenSSL
是一个经过良好测试的公认加密框架,几乎实现了所有流行的加密标准,但它可能有点难以使用。mcrypt
的安装非常普遍,而且通常更易于使用。
我通常只带sha-1+盐。。,看看crypt函数。
对于PHP版本5.3+
你会使用Bcrypt,这是我所知道的最强的哈希。
但问题是,它比其他加密方式慢。
我推荐AES256,它比bcrypt更快,也安全