Šifrování vlastních dat pomocí algoritmu 4D

Automaticky přeloženo z Deepl

Jak jste si již možná před časem všimli, 4D nabízí jednoduchý způsob šifrování dat. Nyní vám 4D také umožňuje použít stejný algoritmus, jaký se používá pro šifrování dat, ale tentokrát pro vaše vlastní potřeby. Nyní tedy můžete šifrovat a dešifrovat libovolné informace, ať už se jedná o jedno pole v tabulce nebo externí soubory.

Poznámka: Pro ilustraci nových příkazů představených v tomto příspěvku na blogu je zde HDI obsahující falešné lékařské analýzy a jejich externí zprávy ve formátu PDF. V tomto HDI jsou zprávy zašifrovány a vy je dešifrujete, abyste získali čitelné dokumenty.

Staňte se silnějšími

V dnešní době je třeba šifrovat stále více kritických dat, aby se zabránilo hackerským útokům nebo únikům dat. Tím, že vám 4D umožňuje snadno šifrovat tabulky, již odpověděl na tuto hlavní potřebu. Někdy však potřebujete zašifrovat pouze pole v tabulce nebo externí soubory spojené se záznamy, jako jsou zprávy, faktury nebo lékařské analýzy. To jste již mohli udělat pomocí třídy 4D.CryptoKey, ale asymetrické algoritmy jsou pro účely podepisování informací přizpůsobeny více. Nyní vám nabízíme možnost šifrovat vlastní data nebo soubory silným symetrickým algoritmem AES-256, stejným, jaký používá 4D pro šifrování dat a časopisů.

Za oponou

Nový Encrypt data BLOB příkaz získá blob a vypočítá zašifrovaný blob pomocí parametrů, jako je objekt průchodu klíče a sůl.

Objekt průkazu klíče je objekt, jehož výsledkem je tzv. New data key volání příkazu. Místo objektu key pass můžete také použít přímo přístupovou frázi. Protože 4D používá k šifrování algoritmus typu AES, má výsledný blob násobek velikosti 16 bajtů. Pokud tedy velikost původního blobu není násobkem 16, příkaz přidá k němu terminální nulové bajty.

Při opačné operaci se nový Decrypt data BLOB příkaz získá zašifrovaný blob a pomocí stejných parametrů vypočítá dešifrovaný blob. Dejte si však pozor, pokud parametry nemají přesně stejné hodnoty jako parametry použité při šifrování, dešifrovaný blob nebude stejný jako původní. Ve skutečnosti je to očekávané chování kryptografie!

Sůl není tak špatná

Použití soli je způsob, jak zajistit, aby ze zašifrovaných dat nebylo možné získat původní data. Jedním ze způsobů prolomení dat je frekvenční analýza, tj. porovnání zašifrovaných informací s velmi podobnými původními informacemi. Když zašifrujete stejné informace stejnou přístupovou frází, ale různými solemi, bude otisk prstu (zašifrovaná informace) zcela odlišný.

Sůl má větší význam, protože její hodnoty jsou vícenásobné. Když například šifrujete pole nebo soubor spojený se záznamem, můžete jako sůl snadno použít primární klíč. Tímto způsobem, i když je původní obsah pole nebo souboru u několika záznamů stejný, bude zašifrovaný obsah zcela odlišný.

UKÁZKA ŠIFROVÁNÍ SOUBORU

Chcete-li snadno zvládnout šifrování a dešifrování souborů s obnovením původní velikosti, můžete použít následující metody.

Tyto metody zvládají doplnění 16 bajtů uložením původní velikosti souboru v samotném zašifrovaném souboru, takže ji lze při dešifrování snadno obnovit.

//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

PŘÍPAD POUŽITÍ

Pro ilustraci použití těchto nových příkazů uvádíme HDI obsahující několik falešných lékařských analýz a jejich externí zprávy ve formátu PDF. V tomto HDI jsou zprávy zašifrovány a vy je dešifrujete, abyste získali čitelné dokumenty.

HDI: Šifrování BLOB

Nyní je na vás, abyste šifrovali a dešifrovali data tak, jak to dělá 4D!

Avatar
• Product Owner • Damien Fuzeau se připojil k týmu 4D Product v únoru 2019. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich následný převod do funkčních specifikací. Jeho úkolem je také zajistit, aby dodávané implementace funkcí vyhovovaly potřebám zákazníků. Damien vystudoval softwarové inženýrství na University of Nantes. Ve své bývalé společnosti strávil více než 23 let, nejprve jako vývojář (objevil 4D v roce 1997) a později jako technický manažer a softwarový architekt. Tato společnost je partnerem 4D OEM a nasadila obchodní software založený na 4D pro tisíce uživatelů na stovkách serverů. Damien je tedy zvyklý na 4D vývoj a nasazení ve vícejazyčném kontextu.