PHP MCRYPT加密/解密返回不可见的奇怪字符


PHP MCRYPT encrypt/decrypt returns invisible strange characters?

mcrypt_decrypt给了我额外的不可见的字符,这些字符只是在页面上回显不可见。只能通过将其写入文本文件才能看到。意思是,仅仅在页面上显示是可以的,很难被注意到。

下面是通过google搜索得到的代码示例。如果有问题,请指导我正确的用法:

function encrypt ($pure_string, $key) {
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, $pure_string, MCRYPT_MODE_ECB, $iv);
    return $encrypted_string;
}
function decrypt ($encrypted_string, $key) {
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);
    return $decrypted_string;
}

但是当我尝试的时候:

$encrypted_string = encrypt("This is the original string.", "ABC123");
echo decrypt($encrypted_string, "ABC123");

. .我得到的是:

This is the original string.�������

这个奇怪的字符�������实际上不可见,当你/我只是echo它。只能通过写入文本文件才能看到。

    那么我错过了什么呢?
  • 有什么完美的方法来实现这个加密/解密?

谢谢。

您可以使用trim($string, "'0'4")剪切这些字符

这是填充。ECB模式要求输入是密码块大小的倍数,因此添加了额外的字节(最有可能是pkcs# 5填充)。

要删除pkcs# 5填充,可以使用以下代码:

$dec_s = strlen($decrypted);
$padding = ord($decrypted[$dec_s-1]);
$decrypted = substr($decrypted, 0, -$padding); 

rtrim()将删除McRypt添加的填充…

函数加密(pure_string美元,美元关键) {

=> $关键

$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, $pure_string, MCRYPT_MODE_ECB, $iv);

=> $ encryption_key

不等于