Durante la creación de un archivo cifrado en AIX, recibí este error:
$ openssl enc -aes-256-cbc -salt -in test.img -out test.img.enc
test.img: Value too large to be stored in data type
14221428:error:0200107F:system library:fopen:Value too large to be stored in:bss_file.c:356:fopen('test.img','r')
14221428:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:358:
El tamaño del archivo test.img es de 35 GB
El mismo comando funcionó en Linux para archivos de 100GB.
openssl version
.openssl
saber algo sobre el tamaño de los archivos de entrada y salida? Algo así comocat test.img | openssl enc -aes-256-cbc -salt | cat >test.img.enc
truss openssl enc -aes-256-cbc -salt -in test.img -out test.img.enc
Respuestas:
Según el error, su copia de
openssl
no está compilada o vinculada con soporte de archivos grandes.fopen
probablemente falla porque intenta descubrir el tamaño del archivo justo después de abrirlo y falla.El truco, entonces, es hacer una
openssl
lectura desde una tubería y escribir en una tubería. Las tuberías no tienen tamaño, y lofopen
sabe, por lo que debería estar bien. Las cosas en los otros extremos de las tuberías no necesitan hacer nada elegante, solo necesitan ser filtros de paso entreopenssl
y los archivos reales. Eso es exactamente lo quecat
es el trabajo.cat
, que ahora se convierte en la cosa directamente expuesta al archivo grande, debe tener soporte para archivos grandes, pero como una utilidad básica suministrada por el sistema operativo, supongamos que sí.fuente