Jika Anda ingin melakukan kriptografi di Pascal on Arm, PowerPC atau platform eksotis lainnya, Anda telah datang ke tempat yang tepat. Jika Anda adalah pengguna Delphi atau ingin menggunakan cipher yang lebih modern dan algoritma hash seperti SHA-3, silakan lihat repositori DEC resmi.
Kompendium Enkripsi Delphi (DEC) adalah perpustakaan kriptografi untuk pembangun Delphi, C ++ dan Pascal gratis. Awalnya dikembangkan oleh Hagen Reddmann, dibuat kompatibel dengan Delphi 2009 oleh Arvid Winkelsdorf, dan sekarang telah diangkut ke Pascal gratis.
Perubahan berikut telah dilakukan sehubungan dengan rilis 2008:
Lingkungan berikut telah diuji:
Secara teknis Delphi 7+ dan FPC 2.6+ harus kompatibel (mungkin perubahan yang sangat kecil yang diperlukan untuk versi lama).
Proyek ini dilisensikan di bawah lisensi MIT/Freeware. Anda bebas menggunakan perpustakaan untuk penggunaan pribadi dan komersial tetapi dengan risiko Anda sendiri. Lihat lisensi untuk detailnya.
DEC terutama terdiri dari unit -unit berikut:
Selanjutnya proyek Dectest disertakan, yang menyediakan kasus uji untuk semua algoritma.
DEC asli juga berisi unit ASN1 dan TypeInfoex - itu tidak diperlukan untuk fungsionalitas inti DEC dan belum diangkut. Jika Anda membutuhkannya, silakan dapatkan dari rilis yang lebih lama.
Periksa deccipher.pas untuk detail lebih lanjut tentang mode ini.
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;
CATATAN: Jika plaintext tidak empuk, DEC akan menempatkan blok terpotong terakhir dengan CFB8! Padding PKCS tidak didukung oleh Dec. Menggunakan DEC bersama dengan perpustakaan crypto lainnya tentu saja mungkin, tetapi Anda perlu memastikan untuk preprocess (yaitu pad) plaintext dengan benar.
Catatan juga: Jenis biner DEC didefinisikan sebagai RawbyTestring. Jika Anda berada di lingkungan Unicode (misalnya Delphi 2009+), perawatan disarankan ketika berhadapan dengan variabel string tipe. Tidak pernah secara langsung meneruskannya ke fungsi yang membutuhkan biner!
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;
Setiap kelas hash juga memiliki fungsi yang disebut KDF2 dan KDFX untuk derivasi kunci (misalnya untuk digunakan sebagai tombol sesi di cipher).
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
Encode dan decode keduanya kelebihan beban untuk juga mengambil buffer input yang tidak diketik.