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,一个基于随附的 LibTomMath 库构建的 Math::BigInt 后端, 该库由 LibTomCrypt 内部使用。
此模块主要作为顶层发行版/文档页面。实际使用时,请使用下面列出的具体模块之一。
对于新设计,建议优先使用认证加密(AEAD),而非裸加密模式:
random_bytes、random_bytes_hex、random_bytes_b64、random_bytes_b64u、random_string 和 random_string_from 覆盖了大多数用例。OO API 和特定算法的包装器(Crypt::PRNG::ChaCha20、Crypt::PRNG::Fortuna 等)主要用于确定性流或与特定 PRNG 的互操作。random_v4uuid 生成不透明的随机标识符。当您需要大致按创建时间排序(毫秒粒度)的标识符时,使用 random_v7uuid。UUID 是标识符,不能替代秘密随机字节。流密码逐字节加密数据,无需块填充。对于大多数应用程序,请优先选择 AEAD 模式(见上文),它将加密与认证捆绑在一起。仅当您单独处理认证时才使用裸流密码。
仅当认证单独处理或不需要认证时才使用这些模式:
单独的 Crypt::Cipher::AES、Crypt::Cipher::Twofish 等模块实现原始的单个块加密,很少直接使用。在几乎所有情况下,您都应该通过 AEAD 模式(Crypt::AuthEnc::GCM、Crypt::AuthEnc::CCM)或分组密码模式(Crypt::Mode::CBC、Crypt::Mode::CTR)来使用它们。选择密码时,AES 是默认选择;它在大多数现代 CPU 上都有硬件加速。
仅将 Crypt::Checksum::CRC32 和 Crypt::Checksum::Adler32 用于非对抗性完整性检查,例如意外损坏检测。它们不是密码学完整性或真实性机制。对于密码学用途,请优先使用 Crypt::Digest、Crypt::Mac,或来自 Crypt::AuthEnc 的 AEAD 模式。
大多数 CryptX 模块通过调用 croak(来自 Carp)来报告错误。无效参数、不支持的算法、错误的密钥大小、格式错误的输入以及内部库故障通常会以带有描述性信息的 croak 方式退出。使用 eval 或 Try::Tiny 捕获异常。
一些验证风格的辅助函数使用返回值而不是 croak。最重要的例子是认证加密模块 Crypt::AuthEnc::* 中的 *_decrypt_verify 函数。当认证失败时,这些函数返回 undef,表示密文被篡改或使用了错误的密钥/nonce。其他模块中的一些解析器/解码器辅助函数对格式错误的输入也会返回 undef 或 false,因此当您需要确切的失败语义时,请查阅具体模块的 POD。
顶层系列模块
Crypt::Cipher, Crypt::Mode, Crypt::AuthEnc, Crypt::Digest, Crypt::Mac, Crypt::Checksum, Crypt::PRNG, Crypt::PK, Crypt::KeyDerivation, Crypt::Misc, Crypt::ASN1
对称密码
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, , , , , , , , , , , , ,
这些底层函数会暴露捆绑的 LibTomCrypt 构建的详细信息。它们用于故障排查和错误报告,而非常规使用。
my $str = CryptX::ltc_build_settings();
返回一个多行字符串,描述捆绑的 LibTomCrypt 库在构建时启用的每一个编译期选项(密码、哈希、MAC、PK 算法、编译器标志等)。
my $name = CryptX::ltc_mp_name();
# e.g. "LTM" (LibTomMath)
返回所使用的数学提供程序后端的名称。
my $bits = CryptX::ltc_mp_bits_per_digit();
# e.g. 60
返回数学提供程序每个 digit 所使用的位数。
CryptX 的一部分是 Math::BigInt::LTM,一个基于捆绑的 LibTomMath 库的 Math::BigInt 后端。它与上述加密 API 相互独立,但随同一发行版一起发布,并使用 LibTomCrypt 所依赖的同一大整数引擎。
本程序是自由软件;您可以根据 Perl 本身的相同条款重新分发和/或修改它。
Copyright (c) 2013-2026 DCIT, a.s. https://www.dcit.cz / Karel Miko
流密码
Crypt::Stream::RC4, Crypt::Stream::ChaCha, Crypt::Stream::XChaCha, Crypt::Stream::Salsa20, Crypt::Stream::XSalsa20, Crypt::Stream::Sober128, Crypt::Stream::Sosemanuk, Crypt::Stream::Rabbit
认证加密模式
Crypt::AuthEnc::CCM, Crypt::AuthEnc::EAX, Crypt::AuthEnc::GCM, Crypt::AuthEnc::GCMSIV, Crypt::AuthEnc::OCB, Crypt::AuthEnc::ChaCha20Poly1305, Crypt::AuthEnc::XChaCha20Poly1305, Crypt::AuthEnc::SIV
哈希函数Crypt::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
消息认证码
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
公钥密码学
Crypt::PK::RSA, Crypt::PK::DSA, Crypt::PK::ECC, Crypt::PK::DH, Crypt::PK::Ed25519, Crypt::PK::X25519, Crypt::PK::Ed448, Crypt::PK::X448
密码学安全随机数生成器
Crypt::PRNG::Fortuna, Crypt::PRNG::Yarrow, Crypt::PRNG::RC4, Crypt::PRNG::Sober128, Crypt::PRNG::ChaCha20
密钥派生函数
ASN.1 解析器
仅当您需要自定义 ASN.1 / DER 解析或编码时,才使用 Crypt::ASN1。
大多数常见的密钥和证书格式已由 PK 模块处理。
杂项辅助工具
Crypt::Misc(base64/base32/base58 编解码器、PEM 辅助函数、恒定时间比较、UUID 生成、八位字节递增辅助函数及相关实用函数)