php / php/php-src

Add streaming encryption/decryption API to OpenSSL extension (openssl_encrypt_init / openssl_encrypt_update / openssl_encrypt_final)

Abierto
#19,553 3 comentarios 0 reacciones 1 asignado Ver en GitHub

@bukka ya está trabajando en esto.

Desde el 22/8/2025.

Extension: openssl Feature Status: Requires RFC
Lenguaje dominante
C
Estrellas
40.4k
Forks
8.1k
Merge medio
2 d 13 h
PR fusionados (30 d)
96

Descripción

Description

Currently, the OpenSSL extension in PHP provides openssl_encrypt() and openssl_decrypt(), which require the entire data buffer in memory for AES-128-GCM, AES-256-GCM... This makes it impractical to process very large files (e.g. 100 MB, 1 GB, 1 TB) because PHP will try to load the entire content into memory before encrypting/decrypting.

Proposal
Introduce a streaming API for encryption/decryption, similar to how hash_init(), hash_update(), and hash_final() work.

For example for encryption:

$res = openssl_encrypt_init('aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag_length);

openssl_encrypt_update($ctx, $aad);

while (!feof($fp_in)) {
    $chunk = fread($fp_in, 1048576); // 1 MB
    $enc = openssl_encrypt_update($res, $chunk);
    fwrite($fp_out, $enc);
}

$enc = openssl_encrypt_final($res, $tag);
fwrite($fp_out, $enc);

And for decryption:

$res = openssl_decrypt_init("aes-256-gcm", $key, OPENSSL_RAW_DATA, $iv, $tag);

openssl_decrypt_update($ctx, $aad);

while (!feof($fp_in)) {
    $chunk = fread($fp_in, 1048576);
    $dec = openssl_decrypt_update($res, $chunk);
    fwrite($fp_out, $dec);
}

$dec = openssl_decrypt_final($res);
fwrite($fp_out, $dec);

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.