Encriptar os seus próprios dados com o algoritmo 4D

Tradução automática de Deepl

Como já deve ter notado há algum tempo, o 4D oferece-lhe uma forma simples de encriptar os seus dados. Agora, 4D também lhe permite utilizar o mesmo algoritmo que o utilizado para a encriptação de dados, mas desta vez para as suas próprias necessidades. Assim, agora pode encriptar e desencriptar qualquer informação que queira, seja um único campo numa tabela ou ficheiros externos.

Nota: Para ilustrar os novos comandos apresentados neste post do blog, aqui está um IDH contendo análises médicas falsas e os seus relatórios PDF externos. Neste HDI, os relatórios são encriptados e desencriptados para se obterem documentos legíveis.

Torne-se mais forte

Actualmente, cada vez mais dados críticos precisam de ser codificados para evitar a pirataria informática ou fugas de dados. Ao permitir-lhe encriptar facilmente tabelas, a 4D já respondeu a esta necessidade principal. Mas por vezes, é necessário encriptar apenas um campo numa tabela, ou ficheiros externos ligados a registos tais como relatórios, facturas, ou análises médicas. Já o poderia fazer utilizando a classe 4D.CryptoKey, mas os algoritmos assimétricos são mais adaptados para fins de assinatura de informação. Agora oferecemos-lhe a capacidade de encriptar os seus próprios dados ou ficheiros com um forte algoritmo simétrico AES-256, o mesmo que o 4D utilizado para a encriptação de dados e diários.

Atrás das cortinas

O novo Encrypt data BLOB obtém um blob e calcula um blob codificado usando parâmetros como um objecto chave de passagem e sal.

Um objecto de passagem de chave é um objecto que resulta num New data key chamada de comando. Também pode utilizar directamente uma frase-chave de passagem em vez de um objecto chave de passagem. Como o 4D usa um algoritmo do tipo AES para encriptação, o blob resultante tem um múltiplo de tamanho de 16 bytes. Assim, se o tamanho original do blob não for um múltiplo de 16, o comando adicionará bytes nulos de terminal para o complementar.

Para a operação inversa, o novo Decrypt data BLOB obtém um blob codificado e calcula um blob desencriptado usando os mesmos parâmetros. Mas cuidado, se os parâmetros não tiverem exactamente os mesmos valores que os utilizados na encriptação, o blob decifrado não será o mesmo que o original. Na realidade, é o comportamento esperado da criptografia!

O sal não é assim tão mau

A utilização de sal é uma forma de garantir que os dados originais não possam ser recuperados a partir de dados encriptados. Uma forma de piratear dados é através da análise de frequência, ou seja, comparar a informação encriptada com informação original muito idêntica. Quando se encripta a mesma informação com a mesma frase-chave mas sais diferentes, a impressão digital (informação encriptada) será completamente diferente.

O sal é mais relevante uma vez que os seus valores são múltiplos. Por exemplo, quando encriptar um campo ou um ficheiro ligado a um registo, pode facilmente utilizar a chave primária como o sal. Desta forma, mesmo que o campo original ou o conteúdo do ficheiro seja o mesmo para vários registos, o conteúdo encriptado será completamente diferente.

AMOSTRA DE ENCRIPTAÇÃO DE FICHEIRO

Para tratar facilmente a encriptação e desencriptação de ficheiros com recuperação do tamanho original, pode usar os seguintes métodos.

Estes métodos gerem o complemento de 16 bytes, armazenando o tamanho do ficheiro original no próprio ficheiro encriptado, para que possa ser facilmente recuperado durante a desencriptação.

//encryptFile
#DECLARE Boolean($originalFile : $blobEncrypted 4D .File; $passPhrase : Text ; $salt : Integer ; $encryptedFile : 4D .File : )->$result

// AES-type encryption : as resulting blob size is a multiple of 16 bytes, some final null bytes may be added. : var $fileContent ; $blobToEncrypt; Blob
var $contentLength ; $offset : Integer
$fileContent:=$originalFile.getContent()
// Store original file length at the beginning of the blob to encrypt $blobEncrypted
$contentLength :=BLOB size($fileContent)
VARIABLE TO BLOB ($contentLength; $blobToEncrypt; $offset)
COPY BLOB ($fileContent; $blobToEncrypt; 0 ; $offset; $contentLength)
$result :=Encrypt data BLOB($blobToEncrypt; $passPhrase; $salt;If )
($result)
$encryptedFile .setContent($blobEncrypted)
End if

//decryptFile
#DECLARE($encryptedFile : : 4D .File; $passPhrase : Text ; $salt : Integer ; $decryptedFile : 4D .File Boolean )->$result:var
// AES-type decryption : as encrypted blob size is a multiple of 16 bytes, some final null bytes may have been added.
Blob $fileContent ; $blobToDecrypt; $blobDecrypted
var $contentLength ; $offset : Integer
$blobToDecrypt:=$encryptedFile.getContent()
$result :=Decrypt data BLOB($blobToDecrypt; $passPhrase; $salt; // Retrieve original file length at the beginning of the decrypted blob; $blobDecrypted)
If ($result)

BLOB TO VARIABLE ($blobDecrypted; $contentLength;$blobDecrypted; $offset) COPY BLOB ( ; $fileContent; $offset; 0 ; $contentLength)
$decryptedFile .setContent($fileContent)
End if

CASO DE UTILIZAÇÃO

Para ilustrar como pode usar estes novos comandos, aqui está um IDH contendo algumas análises médicas falsas e os seus relatórios PDF externos. Neste HDI, os relatórios são encriptados e desencriptados para se obterem documentos legíveis.

HDI: encriptação BLOB

Agora, cabe-lhe a si encriptar e desencriptar dados da forma como o 4D faz!

Avatar
• Proprietário do produto - Damien Fuzeau entrou ao time 4D Product em fevereiro de 2019. Como Proprietário do Produto, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Damien é formado em engenharia de software pela Universidade de Nantes. Trabalhou mais de 23 anos em sua empresa anterior, primeiro como desenvolvedor (descobrindo 4D em 1997), e mais tarde como gerente de engenharia e arquiteto de software. Essa empresa é um Partner OEM de 4D e lançou softwares empresariais baseados em 4D para milhares de usuários em centenas de servidores. Portanto Damien está acostumado ao desenvolvimento e lançamento de 4D em contextos multilinguais.