如何在php中加密和解密数据?

时间:2013-09-26 06:52:39

标签: php encryption

如何在php中加密和解密数据?

到目前为止我的代码是: -

function encrypter($plaintext)
{
    $plaintext = strtolower($plaintext);
    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,FLENCKEY,$plaintext,MCRYPT_MODE_ECB);    
    return trim(base64_encode($crypttext));
}

function decrypter($crypttext)
{
    $crypttext = base64_decode($crypttext);    
    $plaintext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,FLENCKEY,$crypttext,MCRYPT_MODE_ECB);    
    return trim($crypttext);
}

$ test =“abc@gmail.com”;

echo encrypter(test);

输出

iLmUJHKPjPmA9vY0jfQ51qGpLPWC/5bTYWFDOj7Hr08=

echo decrypter(test);

输出

��-

5 个答案:

答案 0 :(得分:2)

decrypter()函数中,您返回了错误的数据。

您应该返回$plaintext而不是$crypttext

function decrypter($crypttext)
{
    $crypttext = base64_decode($crypttext);    
    $plaintext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,FLENCKEY,$crypttext,MCRYPT_MODE_ECB);    
    //return trim($crypttext);
    return trim($plaintext);
}

答案 1 :(得分:2)

此页面上的其他代码示例(包括问题)不安全。

为了安全起见:

  1. Don't use mcrypt
  2. Use authenticated encryption
  3. Never use ECB mode (a.k.a. MCRYPT_MODE_ECB)
  4. 请参阅this answer以了解PHP中的安全加密。

答案 2 :(得分:1)

这就是我使用的。超级简单。

function encrypt_decrypt($action, $string) {
   $output = false;
   $key = '$b@bl2I@?%%4K*mC6r273~8l3|6@>D';
   $iv = md5(md5($key));
   if( $action == 'encrypt' ) {
       $output = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, $iv);
       $output = base64_encode($output);
   }
   else if( $action == 'decrypt' ){
       $output = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, $iv);
       $output = rtrim($output, "");
   }
   return $output;
}

您可以将$key更改为您想要的任何内容,或将其保留。 (这不是我的关键,顺便说一句)

encrypt_decrypt('encrypt', $str)加密

encrypt_decrypt('decrypt', $str)解密

答案 3 :(得分:0)

在解密器功能中,更改

return trim($crypttext);

return trim($plaintext);

但是看看你的函数,由于strtolower函数,我不太确定它是否会返回完全相同的字符串。你不能只做一个strtoupper函数,因为原始文本可能不是全都用大写字母。

答案 4 :(得分:0)

警告 从PHP 7.1.0开始, mcrypt_encrypt 已被弃用。强烈建议不要使用此功能。 改为使用 openssl_encrypt