使用PHP / mysql进行简单的防弹加密

时间:2013-10-06 13:02:23

标签: php mysql hash

我需要一种安全的方法来临时将我的用户联系信息存储在mysql数据库中。

我不希望我的客户敏感信息落入坏人手中,所以这就是我要找的:

  • 只有预定的收件人才能解密信息(用户名是唯一的,可以用作签名/密钥?)
  • 加密必须在函数内完全处理,无需外部程序或服务,换句话说,对最终用户不可见。
  • 简单,防弹,易于理解,因为我远离安全专家,可能的漏洞可能会让我失望。

有人对我有任何提示吗?要阅读的文章,我可以看到的框架甚至是一些示例代码?非常感谢任何帮助。

2 个答案:

答案 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_encryptmcrypt_decrypt。您可以指定要使用的cipher以及要使用的mode。然后,当您想要恢复数据时,您可以再次向mcrypt提供密钥,算法,模式以及mcrypt_encrypt为您提供的无意义输出,并且您将获得原始数据。

我建议使用哈希来使用非常安全的密钥,因为它很难对它们进行逆向工程。使用具有良好且唯一字符串的sha-256哈希(我建议在哈希字符串中混合多个数据)将帮助您保护所需的数据。

答案 1 :(得分:0)

  1. 我不会使用md5,请使用sha1或sha256。
  2. 使用per-user-salt,例如:

  3. $salt = bin2hex(openssl_random_pseudo_bytes(6));
    $password = sha256($account_creation_time . '-' . $salt . '-' . $plain-password);
    

    然后存储$ salt,$ password,当然还有数据库中的帐户创建时间。