Como habrá notado hace tiempo, 4D le ofrece una forma sencilla de encriptar sus datos. Ahora, 4D también le permite utilizar el mismo algoritmo que el utilizado para la encriptación de datos, pero esta vez para sus propias necesidades. Así que ahora puede encriptar y desencriptar cualquier información que desee, ya sea un solo campo de una tabla o archivos externos.
Nota: Para ilustrar los nuevos comandos presentados en esta entrada del blog, he aquí un IDH que contiene análisis médicos falsos y sus informes externos en PDF. En este IDH, los informes están encriptados y usted los desencripta para obtener documentos legibles.
Hazte más fuerte
Hoy en día, cada vez más datos críticos necesitan ser encriptados para evitar hackeos o fugas de datos. Al permitirle encriptar fácilmente las tablas, 4D ya ha respondido a esta necesidad principal. Pero a veces, usted necesita encriptar sólo un campo de una tabla, o archivos externos vinculados a registros como informes, facturas o análisis médicos. Ya podía hacerlo utilizando la clase 4D.CryptoKey, pero los algoritmos asimétricos están más adaptados a los fines de la firma de información. Ahora le ofrecemos la capacidad de cifrar sus propios datos o archivos con un fuerte algoritmo simétrico AES-256, el mismo que 4D utiliza para el cifrado de datos y diarios.
Detrás de las cortinas
El nuevo Encrypt data BLOB obtiene un blob y calcula un blob encriptado utilizando parámetros como un objeto de pase de clave y una sal.
Un objeto de pase de clave es un objeto resultante de una New data key llamada al comando. También puede utilizar una frase de paso directamente en lugar de un objeto de paso de clave. Como 4D utiliza un algoritmo de tipo AES para el cifrado, el blob resultante tiene un tamaño múltiplo de 16 bytes. Así que si el tamaño del blob original no es un múltiplo de 16, el comando añadirá bytes nulos terminales para complementarlo.
Para la operación inversa, el nuevo comando Decrypt data BLOB obtiene un blob cifrado y calcula un blob descifrado utilizando los mismos parámetros. Sin embargo, ten cuidado, si los parámetros no tienen exactamente los mismos valores que los utilizados al encriptar, el blob desencriptado no será el mismo que el original. De hecho, ¡es el comportamiento esperado de la criptografía!
La sal no es tan mala
El uso de la sal es una forma de asegurarse de que los datos originales no pueden ser recuperados de los datos encriptados. Una forma de hackear los datos es mediante el análisis de frecuencias, es decir, comparando la información encriptada con información original muy idéntica. Si se encripta la misma información con la misma frase de contraseña pero con diferentes sales, la huella digital (información encriptada) será completamente diferente.
La sal es más relevante ya que sus valores son múltiples. Por ejemplo, cuando se encripta un campo o un archivo vinculado a un registro, se puede utilizar fácilmente la clave principal como sal. De este modo, aunque el contenido del campo o archivo original sea el mismo para varios registros, el contenido cifrado será completamente diferente.
EJEMPLO DE ENCRIPTACIÓN DE ARCHIVOS
Para manejar fácilmente el cifrado y descifrado de archivos con recuperación del tamaño original, puede utilizar los siguientes métodos.
Estos métodos gestionan el complemento de 16 bytes almacenando el tamaño original del archivo en el propio archivo encriptado para poder recuperarlo fácilmente durante la desencriptación.
//encryptFile
#DECLARE($originalFile : 4D .File; $passPhrase : Text ; $salt : Integer ; $encryptedFile : 4D .File)->$result : Boolean
// AES-type encryption : as resulting blob size is a multiple of 16 bytes, some final null bytes may be added.
var $fileContent ; $blobToEncrypt; $blobEncrypted : Blob
var $contentLength ; $offset : Integer
$fileContent:=$originalFile.getContent()
// Store original file length at the beginning of the blob to encrypt
$contentLength :=BLOB size($fileContent)
VARIABLE TO BLOB ($contentLength; $blobToEncrypt; $offset)
COPY BLOB ($fileContent; $blobToEncrypt; 0; $offset; $contentLength)
$result :=Encrypt data BLOB($blobToEncrypt; $passPhrase; $salt; $blobEncrypted)
If ($result)
$encryptedFile .setContent($blobEncrypted)
End if
//decryptFile
#DECLARE($encryptedFile : 4D .File; $passPhrase : Text ; $salt : Integer ; $decryptedFile : 4D .File)->$result: Boolean
// AES-type decryption : as encrypted blob size is a multiple of 16 bytes, some final null bytes may have been added.
var $fileContent ; $blobToDecrypt; $blobDecrypted : Blob
var $contentLength ; $offset : Integer
$blobToDecrypt:=$encryptedFile.getContent()
$result :=Decrypt data BLOB($blobToDecrypt; $passPhrase; $salt; $blobDecrypted)
If ($result)
// Retrieve original file length at the beginning of the decrypted blob
BLOB TO VARIABLE ($blobDecrypted; $contentLength; $offset)
COPY BLOB ($blobDecrypted; $fileContent; $offset; 0; $contentLength)
$decryptedFile .
setContent($fileContent)
End if
CASO DE USO
Para ilustrar cómo se pueden utilizar estos nuevos comandos, a continuación se muestra un IDH que contiene algunos análisis médicos falsos y sus informes externos en PDF. En este IDH, los informes están encriptados y usted los desencripta para obtener documentos legibles.
Ahora, depende de ti encriptar y desencriptar los datos como lo hace 4D.