Das Cryptography-Project ist ein Open-Source-Project.
Die Verschlüsselung erfolgt nach dem Advanced Encryption Standard (AES). Die Schlüssellänge beträgt 256 Bit.
Es kommt zusätzlich die Betriebsart Cipher Block Chaining (CBC) zur Anwendung.
Es werden immer 128bit-Blöcke verschlüsselt. Sollte der letzte Block weniger Nutzdaten enthalten, wird
auch ein voller 128bit-Block verschlüsselt. Zusätzlich wird die ursprüngliche Byteanzahl in einem Header hinterlegt.
Bei Encrypt wird die Originalanzahl über den Parameter ulBytes übergeben und die erweiterte Byteanzahl zurückgegeben.
Bei Decrypt wird die erweiterte Anzahl über den Parameter ulBytes übergeben und die ursprüngliche Byteanzahl zurückgegeben.
Bei der Verwendung der Funktionen ist zu beachten dass die AES-Key-Arrays an einer 16-Bit-Speichergrenze ausgerichtet werden müssen.
Um Speicher auf dem Stack zu reservieren:
-
alignas(16) unsigned char auc256DecryptKey[256]; alignas(16) unsigned char auc240EncryptKey[240];
oder um Speicher auf dem Heap anzufordern
-
VMBLOCK vb256DecryptKey = VMBlockA(256, 16); VMBLOCK vb240EncryptKey = VMBlockA(240, 16);
Wer ganz sicher gehen will, sollte am Ende der Funktion den Speicher mit Nullen überschreiben.
Für den Stack mit
-
ZeroMem(auc256DecryptKey, 256); ZeroMem(auc240EncryptKey, 240);
oder für den Heap mit
-
ZeroMem(vb256DecryptKey, 256); ZeroMem(vb240EncryptKey, 240);
Der Vector muss nicht an einer Speichergrenze ausgerichtet werden.