PHP openssl_encrypt и openssl_decrypt aes-256-gcm не работают, если внутри функции - PullRequest
0 голосов
/ 13 июня 2019

Я делаю тест с php openssl_encrypt и openssl_decrypt в простом скрипте, не имея 2 внутри какой-либо функции, но как только я помещаю openssl_encrypt внутри пользовательской функции, она не работает, и нет четких возвращаемых строк ошибок.Просто понятия не имею, в чем проблема.Я приложил пример.

Так что, если я закомментирую строку openssl_encrypt и использую encrypt (), то это не сработает, но если вернуть openssl_encrypt, то снова заработает.Любая идея, в чем проблема, когда я использую encrypt ()?

$algo = 'aes-256-gcm';
$options = 0;
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($algo));
$key  = '13123123123';
$data = 'test';
$tag = null;
//$ciphertext = openssl_encrypt($data, $algo, $key, $options, $iv, $tag);
$ciphertext = encrypt($data, $algo, $key, $options, $iv, $tag);
$decrypt = openssl_decrypt($ciphertext, $algo, $key, $options , $iv, $tag);
if (false === $decrypt) {
    echo sprintf("OpenSSL error: %s", openssl_error_string()."\n");
}
echo "data:$data\n";
echo "decrypt:$decrypt\n";
printf ("Decryption %s\n", $data === $decrypt ? 'Ok' : 'Failed');

function encrypt($data, $algo, $key, $options, $iv, $tag) {
    return openssl_encrypt($data, $algo, $key, $options, $iv, $tag);
}

1 Ответ

0 голосов
/ 13 июня 2019

В сигнатуре функции openssl_encrypt вы видите, что $tag передается как ссылка (&$tag), но вы этого не делаете.

Следующие работы:

function encrypt($data, $algo, $key, $options, $iv, &$tag) {
    return openssl_encrypt($data, $algo, $key, $options, $iv, $tag);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...