Php 读取时字符串为空

Php 读取时字符串为空,php,mysql,function,Php,Mysql,Function,所以基本上我调用一个MYSQL查询,它获取一个生成并保存到数据库中的密钥。然后,它将一个名为“ServerCryptKey”的字符串设置为查询的输出,该字符串应为“yQnK9xDCxaLIGwzpsKEXeJR2Iz5ZoHnWyLHHikkQv5zbC8B5Sf36ZU9HteHSW5Ov” 我可以调用字符串fine,它将读取上面的^,但是每当我从这个函数调用它时,它将不读取任何内容,并显示它是一个空字符串 function encrypt($data) { $secret = $Se

所以基本上我调用一个MYSQL查询,它获取一个生成并保存到数据库中的密钥。然后,它将一个名为“ServerCryptKey”的字符串设置为查询的输出,该字符串应为“yQnK9xDCxaLIGwzpsKEXeJR2Iz5ZoHnWyLHHikkQv5zbC8B5Sf36ZU9HteHSW5Ov”

我可以调用字符串fine,它将读取上面的^,但是每当我从这个函数调用它时,它将不读取任何内容,并显示它是一个空字符串

function encrypt($data)
{
    $secret = $ServerCryptKey;
    //Generate a key from a hash
    $key = md5(utf8_encode($secret), true);

    //Take first 8 bytes of $key and append them to the end of $key.
    $key .= substr($key, 0, 8);

    //Pad for PKCS7
    $blockSize = mcrypt_get_block_size('tripledes', 'ecb');
    $len = strlen($data);
    $pad = $blockSize - ($len % $blockSize);
    $data .= str_repeat(chr($pad), $pad);

    //Encrypt data
    $encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');

    return base64_encode($encData);
}

function decrypt($data)
{
    $secret = $ServerCryptKey;
    //Generate a key from a hash
    $key = md5(utf8_encode($secret), true);

    //Take first 8 bytes of $key and append them to the end of $key.
    $key .= substr($key, 0, 8);

    $data = base64_decode($data);

    $data = mcrypt_decrypt('tripledes', $key, $data, 'ecb');

    $block = mcrypt_get_block_size('tripledes', 'ecb');
    $len = strlen($data);
    $pad = ord($data[$len-1]);

    return substr($data, 0, strlen($data) - $pad);
}

如果有人能帮我弄明白为什么这不能抓住绳子,请告诉我,谢谢

你能解释一下你想做什么吗?是否将字符串作为$data传递给decyrpt函数,但它不起作用?否,我将字符串用作加密和解密方法的密钥。$data是我用来解密或加密的数据。你如何在代码中设置
$ServerCryptKey
?@srayhunter通过我第一次发布的MYSQL查询。最好不要使用mcrypt,它已经被废弃了近十年了。因此,它已被弃用,将从核心中删除,并在PHP7.2中放入PECL。它不支持标准的PKCS#7(née PKCS#5)填充,只支持非标准的空填充,甚至不能用于二进制数据。mcrypt有许多突出的bug可以追溯到2003年。取而代之的是使用或提供完整的解决方案,并保持正确。你能解释一下你想做什么吗?是否将字符串作为$data传递给decyrpt函数,但它不起作用?否,我将字符串用作加密和解密方法的密钥。$data是我用来解密或加密的数据。你如何在代码中设置
$ServerCryptKey
?@srayhunter通过我第一次发布的MYSQL查询。最好不要使用mcrypt,它已经被废弃了近十年了。因此,它已被弃用,将从核心中删除,并在PHP7.2中放入PECL。它不支持标准的PKCS#7(née PKCS#5)填充,只支持非标准的空填充,甚至不能用于二进制数据。mcrypt有许多突出的bug可以追溯到2003年。相反,考虑使用或提供完整的解决方案,并保持正确。
function encrypt($data)
{
    $secret = $ServerCryptKey;
    //Generate a key from a hash
    $key = md5(utf8_encode($secret), true);

    //Take first 8 bytes of $key and append them to the end of $key.
    $key .= substr($key, 0, 8);

    //Pad for PKCS7
    $blockSize = mcrypt_get_block_size('tripledes', 'ecb');
    $len = strlen($data);
    $pad = $blockSize - ($len % $blockSize);
    $data .= str_repeat(chr($pad), $pad);

    //Encrypt data
    $encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');

    return base64_encode($encData);
}

function decrypt($data)
{
    $secret = $ServerCryptKey;
    //Generate a key from a hash
    $key = md5(utf8_encode($secret), true);

    //Take first 8 bytes of $key and append them to the end of $key.
    $key .= substr($key, 0, 8);

    $data = base64_decode($data);

    $data = mcrypt_decrypt('tripledes', $key, $data, 'ecb');

    $block = mcrypt_get_block_size('tripledes', 'ecb');
    $len = strlen($data);
    $pad = ord($data[$len-1]);

    return substr($data, 0, strlen($data) - $pad);
}