PHP中的加密会留下不需要的字符

Mic*_*elH 1 php encryption

我已经创建了一个加密函数来加密一个简单的值并将其存储在数据库中.以下是加密和解密的代码:

public function encrypt($string){
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $value = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->key256, $string, MCRYPT_MODE_ECB, $iv);
    $value = base64_encode($value);
    return $value;
}

public function decrypt($string){
    $value = base64_decode($string);
    $value = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->key256, $value, MCRYPT_MODE_ECB);
    return $value;
}
Run Code Online (Sandbox Code Playgroud)

当我加密一个简单的值,如'迈克尔'并再次解密时,我得到的值:

Michael?????????
Run Code Online (Sandbox Code Playgroud)

有没有理由我得到所有这些问号或摆脱它们的方法?

Mat*_*ari 7

根据我的经验,这些额外的字符是用于填充的NULL字节,在解密后保留.

您应该尝试将您的decrypt()功能更改为:

public function decrypt($string){
    $value = base64_decode($string);
    $value = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->key256, $value, MCRYPT_MODE_ECB);
    return trim($value, "\0");
}
Run Code Online (Sandbox Code Playgroud)