对于我的项目,我想以加密格式存储密码,
所以我使用md5('password')
存储它,但我的项目要求是我们应该能够解密密码,并且众所周知我们无法解密md5加密字符串。
所以我选择使用base64_decode('password')
进行编码并使用base64_decode('encodedpassword')
对其进行解码。
但我想知道使用base64_encode
是最佳做法吗?还是有PHP的其他加密解密技术?
答案 0 :(得分:7)
首先,md5('password')
不加密。 哈希数据后,无法恢复原始密码。 NB技术读者:由于存在有限数量的哈希值和无限数量的不同字符串,因此暴力攻击也无法恢复密码。
现在,base64_encode('password')
也不是加密,除非可能是非常松散的意思。任何人都可以查看Base64文本并恢复原始密码。
加密,因为它通常被称为明文和某种私钥。加密算法的一个例子是AES-256(“Rijndael”是赢得AES比赛并因此获得冠军的算法的名称)。 AES-256使用256位密钥,在正确实施时通常被认为非常安全。
密码学不是一个应该轻易接近的主题。要做到正确是非常困难的,而当你不这样做时会产生后果,虽然这似乎是矛盾的,既微妙又严重。
您应该非常仔细地评估是否需要能够恢复密码。在99.9999999%的案例中,答案是“不”。事实上,我想不出密码的纯文本对你很重要的情况。
在您完成评估是否需要能够恢复密码之后,请确定您无需恢复密码。
在此步骤之后,如果您仍然认为您需要能够恢复密码,请查看已编写的PHP加密库。 OpenSSL
是一个经过充分测试的普遍接受的加密框架,它实现了几乎所有流行的加密标准,但它可能在难以使用的一面。 mcrypt
非常普遍,通常更容易使用。
答案 1 :(得分:1)
我通常只使用/ sha-1 +盐...,看一下crypt函数。
答案 2 :(得分:1)