Wenn Sie in Pascal auf Arm, Powerpc oder anderen exotischen Plattformen Kryptographie durchführen möchten, sind Sie genau richtig. Wenn Sie ein Delphi-Benutzer sind oder modernere Chiffren und Hash-Algorithmen wie SHA-3 verwenden möchten, sehen Sie sich bitte das offizielle Dec-Repository an.
Das Delphi -Verschlüsselungskompendium (DEC) ist eine kryptografische Bibliothek für Delphi, C ++ Builder und Free Pascal. Es wurde ursprünglich von Hagen Reddmann entwickelt, mit Delphi 2009 von Arvid Winkeldorf kompatibel gemacht und nun auf freies Pascal portiert.
Die folgenden Änderungen wurden in Bezug auf die Veröffentlichung von 2008 vorgenommen:
Die folgenden Umgebungen wurden getestet:
Technisch gesehen sollte Delphi 7+ und FPC 2.6+ kompatibel sein (möglicherweise sehr geringfügige Änderungen, die für alte Versionen erforderlich sind).
Dieses Projekt ist unter einer MIT/Freeware -Lizenz lizenziert. Sie können die Bibliothek für den persönlichen und kommerziellen Gebrauch verwenden, aber auf eigenes Risiko. Weitere Informationen finden Sie in Lizenz.
DEC besteht hauptsächlich aus den folgenden Einheiten:
Darüber hinaus ist das Dektestprojekt enthalten, das Testfälle für alle Algorithmen bereitstellt.
Der ursprüngliche DEC enthielt auch die Einheiten ASN1 und Typinfoex - diese sind für die Kernfunktionalität von DEC nicht erforderlich und wurden nicht portiert. Wenn Sie sie brauchen, holen Sie sie bitte aus einer älteren Veröffentlichung.
Weitere Informationen zu diesen Modi finden Sie unter Deccipher.pas.
const
STATIC_KEY: array[0..15] of Byte = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
var
IV: array[0..15] of Byte;
Plaintext: Binary;
Ciphertext: TBytes;
begin
RandomSeed;
Plaintext := 'abcdefghijklmnopqrstuvwxyz';
with TCipher_Rijndael.Create do
try
Mode := cmCBCx;
RandomBuffer(IV, 16);
Init(STATIC_KEY, 16, IV, 16);
SetLength(Ciphertext, Length(Plaintext));
Encode(Plaintext[1], Ciphertext[0], Length(Plaintext));
Done; // only needed when same object will be used for further operations
FillChar(Plaintext[1], Length(Plaintext), 0);
Decode(Ciphertext[0], Plaintext[1], Length(Ciphertext));
Assert(Plaintext = 'abcdefghijklmnopqrstuvwxyz');
finally
Free;
end;
end;
Hinweis: Wenn der Klartext nicht gepolstert ist, padelt Dec den letzten verkürzten Block mit CFB8! PKCS -Polsterung wird bis Dezember nicht unterstützt. Die Verwendung von DEC in Verbindung mit anderen Krypto -Bibliotheken ist natürlich möglich, aber Sie müssen sicherstellen, dass Sie den Klartext ordnungsgemäß vorab (dh Pad) vorab.
ANMERKUNG: Der binäre Typ von DEC wird als RawByTestring definiert. Wenn Sie sich in einer Unicode -Umgebung befinden (z. B. Delphi 2009+), wird die Pflege bei der Bearbeitung von Variablen der Typ string empfohlen. Geben Sie sie niemals direkt in eine Funktion ein, die binär dauert!
var
InputBuf: TBytes;
InputRawStr, Hash: Binary;
begin
SetLength(InputBuf, 4);
FillChar(InputBuf[0], 4, $AA);
Hash := THash_SHA256.CalcBuffer(InputBuf[0], 4, TFormat_MIME64);
// -> 2+0UzrAB0RDXZrkBPTtbv/rWkVR1qboHky0qwFeUTAQ=
InputRawStr := 'My message';
Hash := THash_SHA256.CalcBinary(InputRawStr, TFormat_HEXL);
// -> acc147c887e3b838ebf870c8779989fa8283eff5787b57f1acb35cac63244a81
Hash := THash_SHA256.CalcBinary(InputRawStr, TFormat_Copy);
// -> Hash contains ac c1 47 ... raw bytes. Can be copied to a 32 bytes array using Move(Hash[1], HashBytes[0], 32);
end;
Jede Hash -Klasse hat auch Funktionen, die als KDF2 und KDFX für die Schlüsselableitung bezeichnet werden (z. B. für die Verwendung als Sitzungsschlüssel in Chiffren).
Writeln(TFormat_MIME64.Encode('My message'));
// -> TXkgbWVzc2FnZQ==
Writeln(TFormat_MIME64.Decode('TXkgbWVzc2FnZQ=='));
// -> My message
Writeln(TFormat_PGP.Encode('Hello, how are you today?'));
// -> SGVsbG8sIGhvdyBhcmUgeW91IHRvZGF5Pw== <line break> =nUAA
Encodes und Decodieren werden beide überladen, um auch einen ungtartigen Eingangspuffer zu nehmen.