Sto usando PHP 7.1 e posso criptare con successo un pezzo di stringa, in questo modo:
$key = random_bytes(32);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-gcm'));
$cipherText = openssl_encrypt(
'The quick brown fox jumps over the lazy dog.',
'aes-256-gcm',
$key,
OPENSSL_RAW_DATA,
$iv,
$tag,
''
)
Quindi, posso decodificarlo correttamente con:
openssl_decrypt(
$cipherText,
'aes-256-gcm',
$key,
OPENSSL_RAW_DATA,
$iv,
$tag,
''
);
Tuttavia, durante i test, ho scoperto che se decrittalo nel modo seguente:
openssl_decrypt(
$cipherText,
'aes-256-gcm',
$key,
OPENSSL_RAW_DATA,
$iv,
mb_substr($tag, 0, mb_strlen($tag) - 15),
''
);
Vorrei ancora ottenere la mia stringa perfettamente bene. Senza sorpresa, questo accade anche se rimuovo i dati dal tag di autenticazione quando si trova in formato base64url.
Perché succede?