0

如何在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";

回声加密器(测试);

输出是

iLmUJHKPjPmA9vY0jfQ51qGpLPWC/5bTYWFDOj7Hr08=

回声解密器(测试);

输出是

��-
4

5 回答 5

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);
}
于 2013-09-26T06:55:54.497 回答
2

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

为了安全起见:

  1. 不要使用 mcrypt
  2. 使用经过身份验证的加密
  3. 永远不要使用 ECB 模式(又名MCRYPT_MODE_ECB

请参阅此答案以了解 PHP 中的安全加密。

于 2017-12-30T18:25:13.527 回答
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)解密

于 2013-09-26T07:01:28.643 回答
0

在解密器函数中,更改

return trim($crypttext);

return trim($plaintext);

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

于 2013-09-26T06:58:56.853 回答
0

警告 mcrypt_encrypt自 PHP 7.1.0起已弃用。强烈建议不要依赖此功能。请改用openssl_encrypt

于 2018-06-27T05:19:00.807 回答