
Perl-Kryptographie-Toolkit, das symmetrische Chiffren, AEAD-Modi, Hash-Funktionen, MACs, Public-Key-Kryptographie, Schlüsselableitung und sichere Zufallsgenerierung über die gebündelte LibTomCrypt-Bibliothek bereitstellt.
CryptX - Kryptografische Werkzeugsammlung
CryptX ist der Einstiegspunkt der Distribution. Im normalen Code lädt man eines der unten aufgeführten konkreten Module.
## Einmal-Hashing
use Crypt::Digest qw(digest_data_hex);
my $sha256 = digest_data_hex('SHA256', 'hello world');
## Klassische AES-CBC-Verschlüsselung mit Padding
use Crypt::Mode::CBC;
my $cbc = Crypt::Mode::CBC->new('AES');
my $iv = random_bytes(16); # 16-Byte AES-Blockgröße IV
my $cbc_ciphertext = $cbc->encrypt('hello world', $key, $iv);
## Authentifizierte Verschlüsselung (AEAD) mit AES
use Crypt::AuthEnc::GCM qw(gcm_encrypt_authenticate);
my $key = random_bytes(32); # 32-Byte AES-256-Schlüssel
my $nonce = random_bytes(12); # 12-Byte einmalige Nonce
my ($ciphertext, $tag) = gcm_encrypt_authenticate('AES', $key, $nonce, 'header', 'hello world');
## Nachrichtenauthentifizierung
use Crypt::Mac::HMAC qw(hmac_hex);
my $mac = hmac_hex('SHA256', $key, 'hello world');
## Sichere Zufallsdaten + UUID-Hilfsfunktionen
use Crypt::PRNG qw(random_bytes random_string);
use Crypt::Misc qw(random_v4uuid random_v7uuid);
my $salt = random_bytes(16);
my $token = random_string(24);
my $uuid4 = random_v4uuid();
my $uuid7 = random_v7uuid();
## Klassische passwortbasierte Schlüsselableitung
use Crypt::KeyDerivation qw(pbkdf2);
my $dk = pbkdf2('password', $salt, 100_000, 'SHA256', 32);
## Reine Stromchiffre (Authentifizierung separat)
use Crypt::Stream::ChaCha;
my $stream = Crypt::Stream::ChaCha->new($key, $nonce);
my $stream_ciphertext = $stream->crypt('hello world');
## Moderne Signaturen
use Crypt::PK::Ed25519;
my $signer = Crypt::PK::Ed25519->new->generate_key;
my $sig = $signer->sign_message('hello world');
my $ok = $signer->verify_message($sig, 'hello world');
## Schlüsselaustausch
use Crypt::PK::X25519;
my $alice = Crypt::PK::X25519->new->generate_key;
my $bob = Crypt::PK::X25519->new->generate_key;
my $shared_secret = $alice->shared_secret($bob);
Perl-Kryptografiemodule, die auf der gebündelten LibTomCrypt-Bibliothek basieren. Die Distribution enthält außerdem Math::BigInt::LTM, ein Backend für Math::BigInt, das auf der gebündelten LibTomMath-Bibliothek aufbaut, die intern von LibTomCrypt verwendet wird.
Dieses Modul dient hauptsächlich als zentrale Seite für Distribution/Dokumentation. Für die eigentliche Arbeit verwenden Sie eines der unten aufgeführten konkreten Module.
Bevorzugen Sie bei neuen Entwürfen authentifizierte Verschlüsselung (AEAD) gegenüber reinen Verschlüsselungsmodi:
random_bytes, random_bytes_hex, random_bytes_b64, random_bytes_b64u,
random_string und random_string_from decken die meisten Anwendungsfälle ab. Die OO-API
und die algorithmusspezifischen Wrapper (Crypt::PRNG::ChaCha20, Crypt::PRNG::Fortuna usw.)
dienen hauptsächlich deterministischen Strömen oder der Interoperabilität mit einem bestimmten PRNG.random_v4uuid verwenden
für undurchsichtige Zufallsidentifikatoren. random_v7uuid verwenden, wenn ungefähr zeitlich geordnete Identifikatoren
gewünscht werden, die nach Erstellungszeit auf Millisekundenebene sortieren. UUIDs sind Identifikatoren, kein Ersatz für
geheime Zufallsbytes.Stromchiffren verschlüsseln Daten Byte für Byte ohne Block-Padding. Für die meisten Anwendungen einen AEAD-Modus bevorzugen (siehe oben), der Verschlüsselung mit Authentifizierung bündelt. Reine Stromchiffren nur verwenden, wenn die Authentifizierung separat erfolgt.
Diese nur verwenden, wenn die Authentifizierung separat erfolgt oder nicht benötigt wird:
Die einzelnen Module Crypt::Cipher::AES, Crypt::Cipher::Twofish usw. implementieren rohe Einzelblockverschlüsselung und werden selten direkt verwendet. In fast allen Fällen sollten Sie sie über einen AEAD-Modus (Crypt::AuthEnc::GCM, Crypt::AuthEnc::CCM) oder einen Block Chiffren-Modus (Crypt::Mode::CBC, Crypt::Mode::CTR) verwenden. Bei der Wahl einer Chiffre ist AES die Standardwahl; auf den meisten modernen CPUs hardwarebeschleunigt.
Crypt::Checksum::CRC32 und Crypt::Checksum::Adler32 nur für nicht-gegnerische Integritätsprüfungen wie die Erkennung versehentlicher Korruption verwenden. Sie sind keine kryptografischen Integritäts- oder Authentizitätsmechanismen. Für kryptografische Zwecke Crypt::Digest, Crypt::Mac oder einen AEAD-Modus aus Crypt::AuthEnc bevorzugen.
Die meisten CryptX-Module melden Fehler durch Aufruf von croak (aus Carp).
Ungültige Parameter, nicht unterstützte Algorithmen, falsche Schlüsselgrößen, fehlerhafte
Eingaben und interne Bibliotheksfehler führen meist zu einem croak mit einer beschreibenden
Nachricht. Ausnahmen mit eval oder Try::Tiny abfangen.
Einige Validierungs-Helfer verwenden einen Rückgabewert anstelle von croak. Die
wichtigsten Beispiele sind die *_decrypt_verify-Funktionen in den
authentifizierten Verschlüsselungsmodulen Crypt::AuthEnc::*.
Diese geben undef zurück, wenn die Authentifizierung fehlschlägt, was auf manipulierte Chiffretexte
oder falsche Schlüssel/Nonces hinweist. Einige Parser-/Decodier-Helfer in anderen Modulen
geben ebenfalls undef oder false für fehlerhafte Eingaben zurück, also die konkrete
Modul-POD prüfen, wenn genaue Fehlersemantik benötigt wird.
Top-Level-Familienmodule
Crypt::Cipher, Crypt::Mode, Crypt::AuthEnc, Crypt::Digest, Crypt::Mac, Crypt::Checksum, Crypt::PRNG, Crypt::PK, Crypt::KeyDerivation, Crypt::Misc, Crypt::ASN1
Symmetrische Chiffren
Crypt::Cipher::AES, Crypt::Cipher::Anubis, Crypt::Cipher::ARIA, Crypt::Cipher::Blowfish, Crypt::Cipher::Camellia, Crypt::Cipher::CAST5, Crypt::Cipher::DES, Crypt::Cipher::DES_EDE, Crypt::Cipher::IDEA, Crypt::Cipher::KASUMI, Crypt::Cipher::Khazad, Crypt::Cipher::MULTI2, Crypt::Cipher::Noekeon, Crypt::Cipher::RC2, , , , , , , , , , , , ,
Diese Low-Level-Funktionen legen Details des gebündelten LibTomCrypt-Builds offen. Sie sind für Fehlerbehebung und Fehlerberichte gedacht, nicht für den regulären Gebrauch.
my $str = CryptX::ltc_build_settings();
Gibt einen mehrzeiligen String zurück, der jede Compile-Zeit-Option beschreibt, die aktiviert war, als die gebündelte LibTomCrypt-Bibliothek erstellt wurde (Chiffren, Hashes, MACs, PK-Algorithmen, Compiler-Flags usw.).
my $name = CryptX::ltc_mp_name();
# z.B. "LTM" (LibTomMath)
Gibt den Namen des verwendeten Mathematik-Provider-Backends zurück.
my $bits = CryptX::ltc_mp_bits_per_digit();
# z.B. 60
Gibt die Anzahl der Bits pro Ziffer zurück, die vom Mathematik-Provider verwendet werden.
Ein Teil von CryptX ist Math::BigInt::LTM, ein Math::BigInt-Backend, das auf der gebündelten LibTomMath-Bibliothek basiert. Es ist getrennt von den oben genannten kryptografischen APIs, wird aber in derselben Distribution ausgeliefert und verwendet dieselbe Big-Integer-Engine, auf die LibTomCrypt angewiesen ist.
Dieses Programm ist freie Software; Sie können es unter denselben Bedingungen wie Perl selbst weiterverbreiten und/oder modifizieren.
Copyright (c) 2013-2026 DCIT, a.s. https://www.dcit.cz / Karel Miko
Blockchiffren-Modi
Crypt::Mode::CBC, Crypt::Mode::CFB, Crypt::Mode::CTR, Crypt::Mode::ECB, Crypt::Mode::OFB
Stromchiffren
Crypt::Stream::RC4, Crypt::Stream::ChaCha, Crypt::Stream::XChaCha, Crypt::Stream::Salsa20, Crypt::Stream::XSalsa20, Crypt::Stream::Sober128, Crypt::Stream::Sosemanuk, Crypt::Stream::Rabbit
Authentifizierte Verschlüsselungsmodi
Crypt::AuthEnc::CCM, Crypt::AuthEnc::EAX, Crypt::AuthEnc::GCM, Crypt::AuthEnc::GCMSIV, Crypt::AuthEnc::OCB, Crypt::AuthEnc::ChaCha20Poly1305, Crypt::AuthEnc::XChaCha20Poly1305, Crypt::AuthEnc::SIV
Hash-FunktionenCrypt::Digest::BLAKE2b_160, Crypt::Digest::BLAKE2b_256, Crypt::Digest::BLAKE2b_384, Crypt::Digest::BLAKE2b_512, Crypt::Digest::BLAKE2s_128, Crypt::Digest::BLAKE2s_160, Crypt::Digest::BLAKE2s_224, Crypt::Digest::BLAKE2s_256, Crypt::Digest::CHAES, Crypt::Digest::MD2, Crypt::Digest::MD4, Crypt::Digest::MD5, Crypt::Digest::RIPEMD128, Crypt::Digest::RIPEMD160, Crypt::Digest::RIPEMD256, Crypt::Digest::RIPEMD320, Crypt::Digest::SHA1, Crypt::Digest::SHA224, Crypt::Digest::SHA256, Crypt::Digest::SHA384, Crypt::Digest::SHA512, Crypt::Digest::SHA512_224, Crypt::Digest::SHA512_256, Crypt::Digest::Tiger192, Crypt::Digest::Whirlpool, Crypt::Digest::Keccak224, Crypt::Digest::Keccak256, Crypt::Digest::Keccak384, Crypt::Digest::Keccak512, Crypt::Digest::SHA3_224, Crypt::Digest::SHA3_256, Crypt::Digest::SHA3_384, Crypt::Digest::SHA3_512, Crypt::Digest::SHAKE, Crypt::Digest::TurboSHAKE, Crypt::Digest::KangarooTwelve, Crypt::Digest::SM3
Prüfsummen
Nachrichtenauthentifizierungscodes
Crypt::Mac::BLAKE2b, Crypt::Mac::BLAKE2s, Crypt::Mac::F9, Crypt::Mac::HMAC, Crypt::Mac::KMAC, Crypt::Mac::OMAC, Crypt::Mac::Pelican, Crypt::Mac::PMAC, Crypt::Mac::XCBC, Crypt::Mac::Poly1305
Public-Key-Kryptografie
Crypt::PK::RSA, Crypt::PK::DSA, Crypt::PK::ECC, Crypt::PK::DH, Crypt::PK::Ed25519, Crypt::PK::X25519, Crypt::PK::Ed448, Crypt::PK::X448
Kryptografisch sichere Zufallszahlengeneratoren
Crypt::PRNG::Fortuna, Crypt::PRNG::Yarrow, Crypt::PRNG::RC4, Crypt::PRNG::Sober128, Crypt::PRNG::ChaCha20
Schlüsselableitungsfunktionen
ASN.1-Parser
Verwenden Sie Crypt::ASN1 nur, wenn Sie benutzerdefiniertes ASN.1-/DER-Parsing oder -Encoding benötigen.
Die meisten gängigen Schlüssel- und Zertifikatsformate werden bereits von den PK-Modulen verarbeitet.
Verschiedene Hilfsfunktionen
Crypt::Misc (Base64/Base32/Base58-Codecs, PEM-Hilfsfunktionen, zeitkonstanten Vergleich, UUID-Erzeugung, Oktettinkrement-Helfer und verwandte Hilfsfunktionen)