tiene dos opciones (y aquí sólo describen el proceso de cifrado, pero descifrado es similar):
Utilice un cifrado de flujo (como AES-CTR)
inicializar el sistema de cifrado con una 16 byte key y verdaderamente aleatorio de 16 bytes nonce, escriba el nonce, cargue la primera pieza, encripte, escriba el resultado, cargue una segunda pieza y así sucesivamente. Tenga en cuenta que debe inicializar el cifrado solo una vez. El tamaño de la pieza puede ser arbitrario; ni siquiera necesita ser el mismo cada vez.
utilizar un cifrado de bloques con un modo de encadenamiento de una sola pasada, por ejemplo AES128-CBC
Usted inicializar el sistema de cifrado con la clave de 16 bytes, generar un azar de 16 bytes IV, escribir el IV, escriba el total longitud del archivo, cargue la primera pieza, encripte junto con IV, escriba el resultado, cargue una segunda pieza, cifre usando los últimos 16 bytes del bloque cifrado anterior como IV, escriba el resultado, y así sucesivamente. El tamaño de la pieza debe ser un múltiplo de 16 bytes; nuevamente, ni siquiera necesita ser el mismo cada vez. Es posible que deba rellenar el último bloque con ceros.
En ambos casos
Debe calcular el hash criptográfica del archivo original sin cifrar (por ejemplo, usando SHA-256) y escribirlo una vez finalizada la encriptación. Eso es bastante fácil: inicializa el hash desde el principio y alimenta cada bloque tan pronto como se carga (incluido nonce/IV y posiblemente el campo de longitud). En el lado de descifrado, haces lo mismo. Eventualmente, debe verificar que el compendio calculado coincida con el que vino con el archivo cifrado.
¿Cómo se puede hacer eso en iOS? Me temo que no estoy familiarizado con la plataforma, pero CCCypt parece ajustarse a la factura.
EDITAR: nonce/IV y longitud son hash también.
¿Por qué no dividir los datos antes de encriptarlos, luego desencriptarlos y volver a armarlos? –
@PRNDLDevelopmentStudios Sí, supongo que haré eso si es necesario, pero tengo varios archivos grandes, y sería más difícil administrar un montón de archivos divididos. – Kyle
Puede intentar comprimir los datos antes del cifrado, pero no sé si la relación de compresión sería lo suficientemente alta como para importar realmente. ¿Tal vez abrir una conexión SSL a un servidor, cargar los datos cifrados, descifrar el servidor y enviar de vuelta? –