You should not encrypt passwords, instead you should hash them using an algorithm like bcrypt. This answer explains how to properly implement password hashing in PHP. 仍然,以下是加密/解密的方法:
$key = 'password to (en/de)crypt';
$string = ' string to be encrypted '; // note the spaces
8 回答
You should not encrypt passwords, instead you should hash them using an algorithm like bcrypt. This answer explains how to properly implement password hashing in PHP. 仍然,以下是加密/解密的方法:
To Encrypt:
To Decrypt:
Warning :以上示例对信息进行加密,但不对密文进行身份验证以防止篡改 . You should not rely on unauthenticated encryption for security,特别是因为提供的代码容易受到填充oracle攻击 .
也可以看看:
https://stackoverflow.com/a/30189841/2224584
https://stackoverflow.com/a/30166085/2224584
https://stackoverflow.com/a/30159120/2224584
此外,不要只使用"password"作为加密密钥 . Encryption keys are random strings.
Demo at 3v4l.org:
看看mycrypt():http://us.php.net/manual/en/book.mcrypt.php
如果您正在使用postgres,那么pgcrypto用于数据库级加密 . (使搜索和排序更容易)
在处理加密时你应该非常清楚一件事:
试图聪明并发明自己的东西通常会让你感到不安全 .
您可能最好使用PHP附带的cryptography extensions之一 .
要处理字符串/数组,我使用以下两个函数:
它是灵活的,因为您可以通过URL存储/发送字符串或数组,因为字符串/数组在加密之前是串行的 .
最近发现这个课程,它就像一个梦想!
并称之为:
工作实例
即使您有权访问代码,加密/解密数据库中数据的最佳方法是为每个用户使用2个不同的密码(
user-pass
),为所有用户使用私有代码(system-pass
) .Scenario
user-pass
与md5一起存储在数据库中,用于验证每个用户是否登录系统 . 每个用户的此用户传递是不同的 .数据库中的每个用户条目都在md5中为
system-pass
用于数据的加密/解密 . 对于每个用户,该系统传递是相同的 .每次从系统中删除用户时,必须在新的系统通过下再次加密在旧系统通道下加密的所有数据,以避免出现安全问题 .
这只会给你边际保护 . 如果攻击者可以在您的应用程序中运行任意代码,他们可以获得与您的应用程序完全相同的密码 . 如果将密钥存储在文件中并使用该密钥在去往数据库的路上进行加密并在出路时解密,您仍然可以从某些SQL注入攻击和错误放置的数据库备份中获得一些保护 . 但是你应该使用bindparams来完全避免SQL注入的问题 .
如果决定加密,你应该使用一些高级加密库,否则你会弄错 . 您必须正确设置密钥设置,消息填充和完整性检查,或者您的所有加密工作都没什么用处 . GPGME是一个例子的不错选择 . Mcrypt太低了,你可能会弄错 .