
Kit de herramientas criptográficas en Perl que proporciona cifrados simétricos, modos AEAD, funciones hash, MACs, criptografía de clave pública, derivación de claves y generación aleatoria segura a través de la biblioteca LibTomCrypt incluida.
CryptX - Kit de herramientas criptográficas
CryptX es el punto de entrada de la distribución. En el código normal, cargue uno de los módulos concretos que se enumeran a continuación.
## one-shot hashing
use Crypt::Digest qw(digest_data_hex);
my $sha256 = digest_data_hex('SHA256', 'hello world');
## classic AES-CBC encryption with padding
use Crypt::Mode::CBC;
my $cbc = Crypt::Mode::CBC->new('AES');
my $iv = random_bytes(16); # 16-byte AES block-size IV
my $cbc_ciphertext = $cbc->encrypt('hello world', $key, $iv);
## authenticated encryption (AEAD) with AES
use Crypt::AuthEnc::GCM qw(gcm_encrypt_authenticate);
my $key = random_bytes(32); # 32-byte AES-256 key
my $nonce = random_bytes(12); # 12-byte unique nonce
my ($ciphertext, $tag) = gcm_encrypt_authenticate('AES', $key, $nonce, 'header', 'hello world');
## message authentication
use Crypt::Mac::HMAC qw(hmac_hex);
my $mac = hmac_hex('SHA256', $key, 'hello world');
## secure random data + UUID helpers
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();
## classic password-based key derivation
use Crypt::KeyDerivation qw(pbkdf2);
my $dk = pbkdf2('password', $salt, 100_000, 'SHA256', 32);
## bare stream cipher (authenticate separately)
use Crypt::Stream::ChaCha;
my $stream = Crypt::Stream::ChaCha->new($key, $nonce);
my $stream_ciphertext = $stream->crypt('hello world');
## modern signatures
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');
## key agreement
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);
Módulos criptográficos Perl construidos sobre la librería LibTomCrypt incluida. La distribución también incluye Math::BigInt::LTM, un backend de Math::BigInt construido sobre la librería LibTomMath incluida, utilizada internamente por LibTomCrypt.
Este módulo sirve principalmente como página de nivel superior de la distribución/documentación. Para el trabajo real, use uno de los módulos concretos que se enumeran a continuación.
Para diseños nuevos, prefiera el cifrado autenticado (AEAD) sobre los modos de cifrado simples:
random_bytes, random_bytes_hex, random_bytes_b64, random_bytes_b64u,
random_string y random_string_from cubren la mayoría de los casos de uso. La API
orientada a objetos y los envoltorios específicos de algoritmo (Crypt::PRNG::ChaCha20, Crypt::PRNG::Fortuna, etc.)
se usan principalmente para flujos deterministas o interoperabilidad con un PRNG concreto.random_v4uuid
para identificadores aleatorios opacos. Use random_v7uuid cuando desee identificadores aproximadamente ordenados por tiempo
que se ordenen por hora de creación con granularidad de milisegundos. Los UUID son identificadores, no sustituyen a los
bytes aleatorios secretos.Los cifrados de flujo encriptan los datos byte a byte sin relleno de bloque. Para la mayoría de las aplicaciones, prefiera un modo AEAD (ver arriba) que combine el cifrado con la autenticación. Use cifrados de flujo simples únicamente cuando maneje la autenticación por separado.
Use estos modos únicamente cuando la autenticación se maneje por separado o no sea necesaria: