我需要一种安全的方法来临时将我的用户联系信息存储在mysql数据库中。
我不希望我的客户敏感信息落入坏人手中,所以这就是我要找的:
有人对我有任何提示吗?要阅读的文章,我可以看到的框架甚至是一些示例代码?非常感谢任何帮助。
答案 0 :(得分:0)
嗯,问题实际上是一个非常好的问题。有一种方法可以确保这种问题不会发生。 但首先我要清除散列和加密之间的区别
哈希是我们将主题转换为长哈希的时候。这很难逆转,需要大量资源才能完成。我们通常哈希密码e.t.c. 加密是指我们想要安全地存储数据但希望能够将其恢复,我们将其转换为另一个很长的东西,但我们也可以轻松地将其转换(如果我们知道密钥)
你可以使用所谓的“盐”来保护像密码一样的哈希值,因为我们知道Hash(x)与哈希(x + y)非常不同,我们可以使用它。虽然如果我是你,我不会使用MD5,但它仍然很好但是已经看到了冲突(许多哈希算法都有它们,但被发现会降低它们的安全性)。我建议你使用sha256 / sha512。它们非常安全,到目前为止还没有发现已知的碰撞。
除了书呆子,你的问题很简单。我将在我的示例中使用hash function of php。 由于您说用户名是唯一的,因此您可以将其用于非常安全的哈希系统
$password = YOUR_PASSWORD_HERE;
$username = USERNAME_OF_USER;
$safe_hash = hash("sha512",$password.$username);
这会合并两个用户名和密码,并使用sha512算法对它们进行哈希处理(如果需要,可以更改算法)。 这是非常安全的'密码'。'user1'具有唯一且不同于'密码'的哈希.'user2'
如果你想让它更安全,你可以添加其他东西,如创建时间,姓氏,名字,手机号码,电子邮件,创作时间,你知道的任何东西,并且最好是独一无二的。
至于加密数据(如果你愿意,你可以把它取回)你可以使用mcrypt。 您可以使用mcrypt_encrypt和mcrypt_decrypt。您可以指定要使用的cipher以及要使用的mode。然后,当您想要恢复数据时,您可以再次向mcrypt提供密钥,算法,模式以及mcrypt_encrypt为您提供的无意义输出,并且您将获得原始数据。
我建议使用哈希来使用非常安全的密钥,因为它很难对它们进行逆向工程。使用具有良好且唯一字符串的sha-256哈希(我建议在哈希字符串中混合多个数据)将帮助您保护所需的数据。
答案 1 :(得分:0)
$salt = bin2hex(openssl_random_pseudo_bytes(6));
$password = sha256($account_creation_time . '-' . $salt . '-' . $plain-password);
然后存储$ salt,$ password,当然还有数据库中的帐户创建时间。