PHP openssl_decrypt иногда возвращает неожиданное значение вместо FalsePhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 PHP openssl_decrypt иногда возвращает неожиданное значение вместо False

Сообщение Anonymous »

Я пытаюсь поменять наши ключи шифрования и столкнулся со следующей проблемой: я ожидал, что openssl_decrypt() всегда будет возвращать false при использовании недействительного ключа шифрования, но иногда вместо этого он возвращает неожиданное значение . Мне нужно, чтобы старый и новый ключи оставались активными в течение примерно 30 дней.
Как выполнить репликацию:
// KEY_1 is the old key and KEY_2 is the new key
define('KEY_1', 'v3pQz7gtWaGF8N62EFK3VUv0m233ATde3c77z6oC5dk='); // openssl rand -base64 32
define('KEY_2', 'YDqviTmcH1iQJ1KdZXnOD8JILeqOV18t4T2t029Zp3s=');

$testString = '1996'; // or '1252', '1963'
$iv = 'kMg6JRRCq/jPcIQWzE+44Q==';

$encryptedValueUsingKey1 = openssl_encrypt($testString, 'aes128', KEY_1, OPENSSL_RAW_DATA, base64_decode($iv));

// try decrypting using new key
$decryptedValue = openssl_decrypt($encryptedValueUsingKey1, 'aes128', KEY_2, OPENSSL_RAW_DATA, base64_decode($iv)); // expected to be false, but has a value

// fallback to KEY_1 - but never run because $decryptedValue has value: ��e�hf2e��8�@�&
if (!$decryptedValue) {
$decryptedValue = openssl_decrypt($encryptedValueUsingKey1, 'aes128', KEY_1, OPENSSL_RAW_DATA, base64_decode($iv));
}

print_r($decryptedValue); // expected '1996'

Почему openssl_decrypt() не всегда возвращает false при использовании неправильного ключа шифрования? Я хочу иметь возможность менять ключи шифрования, чтобы оба ключа были активны в течение короткого времени, но не могу этого сделать, если не могу гарантировать, что openssl_decrypt() вернет false. Как я могу оставить обе клавиши активными на какое-то время, пока я выполняю вращение?
Другие примечания:
  • Я просто для этого примера создан пример диапазона чисел от 1 до 9999. В большинстве случаев я получал ожидаемое ложное сообщение от openssl_decrypt(). Это всего лишь один пример того, когда мой запасной вариант не работает.
  • Вектор инициализации является постоянным для всех зашифрованных значений в этой системе. Он был сгенерирован с использованием этого кода:
Код для генерации IV:
$ivLen = openssl_cipher_iv_length('aes128');
$ivEnc = openssl_random_pseudo_bytes($ivLen);
$iv = base64_encode($iv);


Подробнее здесь: https://stackoverflow.com/questions/792 ... d-of-false
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»