存储敏感数据php加密的最佳方法

时间:2013-04-09 16:16:35

标签: php crypt sensitive-data

您好,显然这不是代码问题,我非常熟悉php中的salt和md5加密。但是我需要一种安全的方法来在mysql中存储敏感信息。 使用md5它非常简单但又不是最安全的方式。 有什么建议或例子吗? 它需要存储在db中,当然有可能被检索和读取。 最简单的方法就是我正在寻找

2 个答案:

答案 0 :(得分:2)

如果您在加密的数据库中存储了某些内容,那么您不想对其进行解密。如果你想读回来,为什么还要先加密加密呢?

对于加密,确保与未来代码向前兼容并使其更安全的最佳方法是使用crypt()。

php.net/crypt

你可以传递给crypt()的各种选项,如果你存储密码,我可能会使用sha512,其数量足够高,可用于“回合”。查看: http://php.net/crypt#example-4701例如。

基本上,您从数据库中获取散列值,并且可以将其用作纯文本的盐,以验证纯文本是否与存储在数据库中的密码相同 - 它是单向加密,无解密(尚未解密) ,无论如何;)

答案 1 :(得分:1)

public static function encrypt($string, $salt = NULL){

     $mcrypt_iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
     $mcrypt_iv = mcrypt_create_iv($mcrypt_iv_size, MCRYPT_RAND);

     $mcrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $salt, $string, MCRYPT_MODE_ECB, $mcrypt_iv);

     $encoded = base64_encode($mcrypted);

     return $encoded;
}

public static function decrypt($hash, $salt = NULL){

    $mcrypt_iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
    $mcrypt_iv = mcrypt_create_iv($mcrypt_iv_size, MCRYPT_RAND);

    $basedecoded = base64_decode($hash);

    $mcrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $salt, $basedecoded, MCRYPT_MODE_ECB, $mcrypt_iv);

    return $mcrypted;
}

以下代码是一个工作示例,并使用AES-128模式ECB。如果您对使用的加密术语不友好,也不是任何重大交易。只需使用代码。 :)