-4

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

4

2 回答 2

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。如果您对所使用的加密术语不友好,那也不是什么大问题。只需使用代码。:)

于 2013-04-09T16:24:42.060 回答
1

如果您将某些内容存储在加密的数据库中,那么您不想解密它。如果你想读回它,为什么要首先加密它呢?

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

php.net/crypt

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

本质上,您从数据库中获取散列值,您可以将其用作纯文本的盐,以验证纯文本是否与存储在数据库中的密码相同 - 这是一种加密方式,没有解密(但是,无论如何; )

于 2013-04-09T16:38:56.383 回答