
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:
Los módulos individuales Crypt::Cipher::AES, Crypt::Cipher::Twofish, etc. implementan el cifrado bruto de un solo bloque y rara vez se utilizan directamente. En casi todos los casos, debe usarlos a través de un modo AEAD (Crypt::AuthEnc::GCM, Crypt::AuthEnc::CCM) o de un modo de cifrado por bloques (Crypt::Mode::CBC, Crypt::Mode::CTR). Al elegir un cifrado, AES es la opción por defecto; está acelerado por hardware en la mayoría de las CPUs modernas.
Use Crypt::Checksum::CRC32 y Crypt::Checksum::Adler32 únicamente para comprobaciones de integridad no adversariales, como la detección de corrupción accidental. No son mecanismos criptográficos de integridad ni autenticidad. Para uso criptográfico, prefiera Crypt::Digest, Crypt::Mac o un modo AEAD de Crypt::AuthEnc.
La mayoría de los módulos CryptX informan de errores llamando a croak (de Carp).
Los parámetros no válidos, los algoritmos no soportados, los tamaños de clave incorrectos, las entradas
malformadas y los fallos internos de la librería normalmente provocan un croak con un mensaje descriptivo.
Capture las excepciones con eval o Try::Tiny.
Algunos asistentes de estilo validación devuelven un valor en lugar de croak. Los
ejemplos más importantes son las funciones *_decrypt_verify en los
módulos de cifrado autenticado Crypt::AuthEnc::*.
Estas devuelven undef cuando falla la autenticación, lo que indica que el texto cifrado fue manipulado
o que se usó una clave/nonce incorrecta. Algunos asistentes de análisis/decodificación de otros módulos
también devuelven undef o falso ante entradas malformadas, así que consulte el
POD del módulo concreto cuando necesite una semántica de fallo exacta.
Módulos de familia de nivel superior
Crypt::Cipher, Crypt::Mode, Crypt::AuthEnc, Crypt::Digest, Crypt::Mac, Crypt::Checksum, Crypt::PRNG, Crypt::PK, Crypt::KeyDerivation, Crypt::Misc, Crypt::ASN1
Cifrados simétricos
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, , , , , , , , , , , , ,
Estas funciones de bajo nivel exponen detalles de la compilación de LibTomCrypt incluida. Están pensadas para la resolución de problemas y para informes de errores, no para un uso habitual.
my $str = CryptX::ltc_build_settings();
Devuelve una cadena de varias líneas que describe cada opción de compilación que se habilitó al compilar la biblioteca LibTomCrypt incluida (cifrados, hashes, MACs, algoritmos PK, opciones del compilador, etc.).
my $name = CryptX::ltc_mp_name();
# e.g. "LTM" (LibTomMath)
Devuelve el nombre del back-end del proveedor matemático en uso.
my $bits = CryptX::ltc_mp_bits_per_digit();
# e.g. 60
Devuelve el número de bits por dígito utilizado por el proveedor matemático.
Parte de CryptX es Math::BigInt::LTM, un backend de Math::BigInt basado en la biblioteca LibTomMath incluida. Es independiente de las APIs criptográficas anteriores, pero se distribuye en la misma distribución y utiliza el mismo motor de enteros grandes del que depende LibTomCrypt.
Este programa es software libre; puede redistribuirlo y/o modificarlo bajo los mismos términos que Perl.
Derechos de autor (c) 2013-2026 DCIT, a.s. https://www.dcit.cz / Karel Miko
Modos de cifrado por bloques
Crypt::Mode::CBC, Crypt::Mode::CFB, Crypt::Mode::CTR, Crypt::Mode::ECB, Crypt::Mode::OFB
Cifrados de flujo
Crypt::Stream::RC4, Crypt::Stream::ChaCha, Crypt::Stream::XChaCha, Crypt::Stream::Salsa20, Crypt::Stream::XSalsa20, Crypt::Stream::Sober128, Crypt::Stream::Sosemanuk, Crypt::Stream::Rabbit
Modos de cifrado autenticado
Crypt::AuthEnc::CCM, Crypt::AuthEnc::EAX, Crypt::AuthEnc::GCM, Crypt::AuthEnc::GCMSIV, Crypt::AuthEnc::OCB, Crypt::AuthEnc::ChaCha20Poly1305, Crypt::AuthEnc::XChaCha20Poly1305, Crypt::AuthEnc::SIV
Funciones hashCrypt::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
Sumas de comprobación
Códigos de autenticación de mensajes
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
Criptografía de clave pública
Crypt::PK::RSA, Crypt::PK::DSA, Crypt::PK::ECC, Crypt::PK::DH, Crypt::PK::Ed25519, Crypt::PK::X25519, Crypt::PK::Ed448, Crypt::PK::X448
Generadores de números aleatorios criptográficamente seguros
Crypt::PRNG::Fortuna, Crypt::PRNG::Yarrow, Crypt::PRNG::RC4, Crypt::PRNG::Sober128, Crypt::PRNG::ChaCha20
Funciones de derivación de clave
Analizador ASN.1
Utilice Crypt::ASN1 únicamente cuando necesite análisis o codificación ASN.1 / DER personalizados.
La mayoría de los formatos comunes de claves y certificados ya son gestionados por los módulos PK.
Utilidades varias
Crypt::Misc (códecs base64/base32/base58, funciones auxiliares PEM, comparación en tiempo constante, generación de UUID, funciones auxiliares de incremento de octetos y funciones de utilidad relacionadas)