
Perl-криптографический набор инструментов, предоставляющий симметричные шифры, режимы AEAD, хеш-функции, MAC-алгоритмы, криптографию с открытым ключом, вывод ключей и безопасную генерацию случайных чисел через встроенную библиотеку LibTomCrypt.
CryptX — криптографический инструментарий
CryptX — это точка входа в дистрибутив. В обычном коде подключайте один из конкретных модулей, перечисленных ниже.
## 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);
Perl-модули для криптографии, построенные на встроенной библиотеке LibTomCrypt. Дистрибутив также включает Math::BigInt::LTM, бэкенд для Math::BigInt, построенный на встроенной библиотеке LibTomMath, используемой внутри LibTomCrypt.
Этот модуль в основном служит верхнеуровневой страницей дистрибутива/документации. Для реальной работы используйте один из конкретных модулей, перечисленных ниже.
Для новых разработок предпочитайте аутентифицированное шифрование (AEAD) обычным режимам шифрования:
random_bytes, random_bytes_hex, random_bytes_b64, random_bytes_b64u, random_string и random_string_from покрывают большинство случаев использования. ООП-API и обёртки для конкретных алгоритмов (Crypt::PRNG::ChaCha20, Crypt::PRNG::Fortuna, и т.д.) предназначены в основном для детерминированных потоков или совместимости с конкретным PRNG.random_v4uuid для непрозрачных случайных идентификаторов. Используйте random_v7uuid, когда нужны примерно упорядоченные по времени идентификаторы, сортируемые по времени создания с точностью до миллисекунд. UUID — это идентификаторы, а не замена секретным случайным байтам.Поточные шифры шифруют данные побайтово без выравнивания блоков. Для большинства приложений предпочитайте режим AEAD (см. выше), который объединяет шифрование с аутентификацией. Используйте «голые» поточные шифры только тогда, когда вы обрабатываете аутентификацию отдельно.
Используйте их только когда аутентификация обрабатывается отдельно или не нужна: