如何在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);
输出
��-
答案 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)
此页面上的其他代码示例(包括问题)不安全。
为了安全起见:
MCRYPT_MODE_ECB
)。答案 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 。