DCIT/perl-CryptX

GitHub: DCIT/perl-CryptX

基于 LibTomCrypt 库的 Perl 加密工具包,提供涵盖对称加密、非对称加密、哈希、消息认证、密钥派生等全面的密码学功能接口。

Stars: 41 | Forks: 26

# 名称 CryptX - 密码学工具包 # 大纲 CryptX 是发行版的入口。在常规代码中,请加载下方列出的某个具体模块。 ``` ## one-shot hashing use Crypt::Digest qw(digest_data_hex); my $sha256 = digest_data_hex('SHA256', 'hello world'); ## 带 padding 的经典 AES-CBC 加密 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); ## 使用 AES 的 authenticated encryption (AEAD) 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 辅助工具 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(); ## 经典的基于密码的 key derivation use Crypt::KeyDerivation qw(pbkdf2); my $dk = pbkdf2('password', $salt, 100_000, 'SHA256', 32); ## bare stream cipher(单独认证) 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); ``` # 描述 基于内置 [LibTomCrypt](https://github.com/libtom/libtomcrypt) 库构建的 Perl 密码学模块。 该发行版还包含 [Math::BigInt::LTM](https://metacpan.org/pod/Math%3A%3ABigInt%3A%3ALTM),这是一个基于内置 [LibTomMath](https://www.libtom.net/LibTomMath/) 库构建的 [Math::BigInt](https://metacpan.org/pod/Math%3A%3ABigInt) 后端 ,供 LibTomCrypt 在内部使用。 该模块主要用作顶层的发行版/文档页面。对于实际工作, 请使用下方列出的某个具体模块。 ## 算法选择指南 ### 认证加密 (AEAD) 对于新的设计,优先选择认证加密 (AEAD) 而不是纯密码模式: - **ChaCha20-Poly1305** ([Crypt::AuthEnc::ChaCha20Poly1305](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AChaCha20Poly1305)) - 快速,常数时间, 广泛部署(TLS 1.3, WireGuard, SSH)。建议将其作为默认的 AEAD 选择。 - **XChaCha20-Poly1305** ([Crypt::AuthEnc::XChaCha20Poly1305](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AXChaCha20Poly1305)) - 扩展 24 字节 nonce 的 变体。当 nonce 随机生成时,优先选择此项而不是 ChaCha20-Poly1305。 - **AES-GCM** ([Crypt::AuthEnc::GCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCM)) - AES 的标准 AEAD 模式。在现代 CPU 上具有硬件加速 。需要唯一的 nonce;nonce 重用会完全破坏其安全性。 - **AES-SIV** ([Crypt::AuthEnc::SIV](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ASIV)) - 确定性 AEAD,抗 nonce 误用。 速度稍慢,但在无法保证 nonce 唯一性时更安全。 - **AES-GCM-SIV** ([Crypt::AuthEnc::GCMSIV](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCMSIV)) - 抗 nonce 误用的 AEAD (RFC 8452)。 比 AES-SIV 快;当你需要类似 GCM 的性能同时又要防止 nonce 重用时,请选择此项。 - **AES-OCB** ([Crypt::AuthEnc::OCB](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AOCB)) - 非常快速的单遍 AEAD。请检查 你所在司法管辖区的专利状态。 - **AES-EAX** ([Crypt::AuthEnc::EAX](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AEAX)) - 基于 CTR+OMAC 的双遍 AEAD。无专利, 没有 nonce 长度限制。 - **AES-CCM** ([Crypt::AuthEnc::CCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ACCM)) - 用于 WiFi (WPA2) 和蓝牙。需要 提前知道明文长度。 ### 密码学安全的随机数和 UUID - **随机字节/字符串** ([Crypt::PRNG](https://metacpan.org/pod/Crypt%3A%3APRNG)) - 用于 salt、密钥、nonce、token, 以及任何其他机密随机值。函数式辅助函数 `random_bytes`, `random_bytes_hex`, `random_bytes_b64`, `random_bytes_b64u`, `random_string`, 和 `random_string_from` 涵盖了大多数使用场景。OO API 和特定于算法的包装器([Crypt::PRNG::ChaCha20](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AChaCha20), [Crypt::PRNG::Fortuna](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AFortuna), 等) 主要用于确定性流或与特定 PRNG 的互操作性。 - **UUID** (["random\_v4uuid" in Crypt::Misc](https://metacpan.org/pod/Crypt%3A%3AMisc#random_v4uuid), ["random\_v7uuid" in Crypt::Misc](https://metacpan.org/pod/Crypt%3A%3AMisc#random_v7uuid)) - 使用 `random_v4uuid` 作为不透明的随机标识符。当你希望标识符大致按时间排序,并支持以毫秒粒度按创建时间排序时,请使用 `random_v7uuid`。UUID 是标识符,不能替代 机密的随机字节。 ### 流密码 流密码逐字节加密数据,无需块填充。对于大多数 应用,请优先选择 AEAD 模式(见上文),它将加密与 身份验证捆绑在一起。仅当你单独处理身份验证时, 才使用纯流密码。 - **ChaCha** ([Crypt::Stream::ChaCha](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AChaCha)) - 默认的流密码选择。 与 ChaCha20-Poly1305 核心相同,但没有内置 MAC。 - **XChaCha** ([Crypt::Stream::XChaCha](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AXChaCha)) - ChaCha 的扩展 24 字节 nonce 变体。 当 nonce 随机生成时优先选择此项。 - **Salsa20** / **XSalsa20** ([Crypt::Stream::Salsa20](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASalsa20), [Crypt::Stream::XSalsa20](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AXSalsa20)) - ChaCha 的前身。新设计优先选择 ChaCha;Salsa20 仅用于 互操作性(例如 NaCl/libsodium)。 - **RC4** ([Crypt::Stream::RC4](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ARC4)) - **已损坏;不要用于新设计。** 仅为 遗留互操作性而提供。 - **Rabbit**, **Sober128**, **Sosemanuk** ([Crypt::Stream::Rabbit](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ARabbit), [Crypt::Stream::Sober128](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASober128), [Crypt::Stream::Sosemanuk](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASosemanuk)) - 来自 eSTREAM 组合的小众密码。除非特定协议要求,否则请使用 ChaCha。 ### 分组密码模式(不带身份验证) 仅当身份验证被单独处理或不需要时才使用这些模式: - **CTR** ([Crypt::Mode::CTR](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACTR)) - 将分组密码转换为流密码。可并行化。 - **CBC** ([Crypt::Mode::CBC](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACBC)) - 经典模式,需要填充。优先选择 CTR 或 AEAD 模式。 - **ECB** ([Crypt::Mode::ECB](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3AECB)) - **对大多数用途而言是不安全的。** 每个块独立加密。 单独的 [Crypt::Cipher::AES](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AAES), [Crypt::Cipher::Twofish](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ATwofish), 等模块实现了 原始的单块加密,极少被直接使用。在几乎所有情况下,你应该 通过 AEAD 模式([Crypt::AuthEnc::GCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCM), [Crypt::AuthEnc::CCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ACCM)) 或分组 密码模式([Crypt::Mode::CBC](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACBC), [Crypt::Mode::CTR](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACTR)) 来使用它们。选择密码时, **AES** 是默认选择;它在大多数现代 CPU 上具有硬件加速。 ### 哈希函数 - **SHA-256** / **SHA-384** / **SHA-512** ([Crypt::Digest::SHA256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA256), 等) - 通用哈希的 默认选择。受到广泛支持且经过了充分分析。 - **SHA3-256** / **SHA3-512** ([Crypt::Digest::SHA3\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_256), 等) - SHA-2 的替代方案, 具有完全不同的结构(Keccak sponge)。 - **BLAKE2b** / **BLAKE2s** ([Crypt::Digest::BLAKE2b\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_256), 等) - 非常快,尤其是 在软件中。BLAKE2b 用于 64 位平台,BLAKE2s 用于 32 位平台。 - **SHAKE** / **TurboSHAKE** / **KangarooTwelve** - 可扩展输出函数 (XOFs)。 当你需要可变长度的输出时使用。 ### 校验和 使用 [Crypt::Checksum::CRC32](https://metacpan.org/pod/Crypt%3A%3AChecksum%3A%3ACRC32) 和 [Crypt::Checksum::Adler32](https://metacpan.org/pod/Crypt%3A%3AChecksum%3A%3AAdler32) 仅用于 非对抗性的完整性检查,例如意外损坏检测。 它们不是密码学的完整性或真实性机制。对于 密码学用途,请优先选择 [Crypt::Digest](https://metacpan.org/pod/Crypt%3A%3ADigest), [Crypt::Mac](https://metacpan.org/pod/Crypt%3A%3AMac),或来自 [Crypt::AuthEnc](https://metacpan.org/pod/Crypt%3A%3AAuthEnc) 的 AEAD 模式。 ### 消息认证码 - **HMAC** ([Crypt::Mac::HMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AHMAC)) - 标准的 MAC 构造。可与任何哈希一起使用。 使用 HMAC-SHA256 作为默认值。 - **Poly1305** ([Crypt::Mac::Poly1305](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3APoly1305)) - 一次性 MAC,速度极快。用作 ChaCha20-Poly1305 的一部分。要求每条消息使用唯一的密钥。 - **BLAKE2b-MAC** ([Crypt::Mac::BLAKE2b](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3ABLAKE2b)) - 带密钥的 BLAKE2。在 软件中比 HMAC-SHA256 快。 - **CMAC/OMAC** ([Crypt::Mac::OMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AOMAC)) - 基于分组密码的 MAC。当你已经 拥有 AES 但没有哈希函数时使用。 ### 公钥密码学 - **Ed25519** ([Crypt::PK::Ed25519](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AEd25519)) - 现代数字签名。快速,常数时间, 密钥/签名体积小。新签名方案的默认选择。 - **Ed448** ([Crypt::PK::Ed448](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AEd448)) - 安全边际高于 Ed25519(约 224 位对比约 128 位)。 - **X25519** ([Crypt::PK::X25519](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AX25519)) - 椭圆曲线 Diffie-Hellman 密钥协商。密钥 交换的默认选择。 - **X448** ([Crypt::PK::X448](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AX448)) - 安全边际高于 X25519。 - **ECDSA** ([Crypt::PK::ECC](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AECC)) - 广泛使用(TLS,Bitcoin)。新 设计优先选择 Ed25519,除非出于互操作性需要 ECDSA。 - **RSA** ([Crypt::PK::RSA](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ARSA)) - 遗留技术但使用非常广泛。至少使用 2048 位密钥,推荐 4096 位。加密优先使用 OAEP,签名优先使用 PSS。 - **DSA** ([Crypt::PK::DSA](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ADSA)) - 遗留技术。优先选择 Ed25519 或 ECDSA。 - **DH** ([Crypt::PK::DH](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ADH)) - 经典 Diffie-Hellman。新设计优先选择 X25519。 ### 密钥派生 / 密码哈希 - **HKDF** (["hkdf" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#hkdf)) - Extract-then-expand KDF。用于 从共享密钥(例如在 ECDH 之后)派生密钥。 - **Argon2** (["argon2\_pbkdf" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#argon2_pbkdf)) - 内存密集型密码哈希。 推荐的密码存储选择。 - **Bcrypt** (["bcrypt\_pbkdf" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#bcrypt_pbkdf)) - 主要用于 兼容明确要求基于 bcrypt 的密钥派生的格式和协议(例如 某些 OpenSSH 工作流)。新的密码存储设计请优先选择 Argon2。 - **Scrypt** (["scrypt\_pbkdf" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#scrypt_pbkdf)) - 内存密集型 KDF。如果可用,请使用 Argon2。 - **PBKDF2** (["pbkdf2" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#pbkdf2)) - 支持广泛,但仅有 CPU 硬性限制。 尽可能使用 Argon2 或 Scrypt。 - **PBKDF1** (["pbkdf1" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#pbkdf1), ["pbkdf1\_openssl" in Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation#pbkdf1_openssl)) - 仅限遗留 派生。保留此项用于与旧格式的互操作性;不要用于新设计。 ## 错误处理 大多数 CryptX 模块通过调用 `croak`(来自 [Carp](https://metacpan.org/pod/Carp))来报告错误。 无效的参数、不支持的算法、错误的密钥长度、格式不正确的 输入以及内部库故障通常会 croak 并附带描述性 消息。使用 `eval` 或 [Try::Tiny](https://metacpan.org/pod/Try%3A%3ATiny) 捕获异常。 一些验证式的辅助函数使用返回值而不是 croak。最 重要的示例是认证加密模块 `Crypt::AuthEnc::*` 中的 `*_decrypt_verify` 函数。 当身份验证失败时,这些函数会返回 `undef`,表明密文已被篡改, 或者使用了错误的密钥/nonce。其他模块中的某些解析器/解码器辅助函数 对于格式错误的输入也会返回 `undef` 或 false,因此当你需要 了解确切的失败语义时,请查阅具体 模块的 POD。 ## 模块映射 - 顶级家族模块 [Crypt::Cipher](https://metacpan.org/pod/Crypt%3A%3ACipher), [Crypt::Mode](https://metacpan.org/pod/Crypt%3A%3AMode),Crypt::AuthEnc](https://metacpan.org/pod/Crypt%3A%3AAuthEnc), [Crypt::Digest](https://metacpan.org/pod/Crypt%3A%3ADigest), [Crypt::Mac](https://metacpan.org/pod/Crypt%3A%3AMac), [Crypt::Checksum](https://metacpan.org/pod/Crypt%3A%3AChecksum), [Crypt::PRNG](https://metacpan.org/pod/Crypt%3A%3APRNG), [Crypt::PK](https://metacpan.org/pod/Crypt%3A%3APK), [Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation), [Crypt::Misc](https://metacpan.org/pod/Crypt%3A%3AMisc), [Crypt::ASN1](https://metacpan.org/pod/Crypt%3A%3AASN1) - 对称密码 [Crypt::Cipher::AES](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AAES), [Crypt::Cipher::Anubis](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AAnubis), [Crypt::Cipher::ARIA](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AARIA), [Crypt::Cipher::Blowfish](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ABlowfish), [Crypt::Cipher::Camellia](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ACamellia), [Crypt::Cipher::CAST5](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ACAST5), [Crypt::Cipher::DES](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ADES), [Crypt::Cipher::DES\_EDE](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ADES_EDE), [Crypt::Cipher::IDEA](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AIDEA), [Crypt::Cipher::KASUMI](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AKASUMI), [Crypt::Cipher::Khazad](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AKhazad), [Crypt::Cipher::MULTI2](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AMULTI2), [Crypt::Cipher::Noekeon](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ANoekeon), [Crypt::Cipher::RC2](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ARC2), [Crypt::Cipher::RC5](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ARC5), [Crypt::Cipher::RC6](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ARC6), [Crypt::Cipher::SAFERP](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFERP), [Crypt::Cipher::SAFER\_K128](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFER_K128), [Crypt::Cipher::SAFER\_K64](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFER_K64), [Crypt::Cipher::SAFER\_SK128](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFER_SK128), [Crypt::Cipher::SAFER\_SK64](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASAFER_SK64), [Crypt::Cipher::SEED](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASEED), [Crypt::Cipher::SM4](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASM4), [Crypt::Cipher::Serpent](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASerpent), [Crypt::Cipher::Skipjack](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ASkipjack), [Crypt::Cipher::Twofish](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3ATwofish), [Crypt::Cipher::XTEA](https://metacpan.org/pod/Crypt%3A%3ACipher%3A%3AXTEA) - 分组密码模式 [Crypt::Mode::CBC](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACBC), [Crypt::Mode::CFB](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACFB), [Crypt::Mode::CTR](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3ACTR), [Crypt::Mode::ECB](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3AECB), [Crypt::Mode::OFB](https://metacpan.org/pod/Crypt%3A%3AMode%3A%3AOFB) - 流密码 [Crypt::Stream::RC4](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ARC4), [Crypt::Stream::ChaCha](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AChaCha), [Crypt::Stream::XChaCha](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AXChaCha), [Crypt::Stream::Salsa20](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASalsa20), [Crypt::Stream::XSalsa20](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3AXSalsa20), [Crypt::Stream::Sober128](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASober128), [Crypt::Stream::Sosemanuk](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ASosemanuk), [Crypt::Stream::Rabbit](https://metacpan.org/pod/Crypt%3A%3AStream%3A%3ARabbit) - 认证加密模式 [Crypt::AuthEnc::CCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ACCM), [Crypt::AuthEnc::EAX](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AEAX), [Crypt::AuthEnc::GCM](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCM), [Crypt::AuthEnc::GCMSIV](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AGCMSIV), [Crypt::AuthEnc::OCB](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AOCB), [Crypt::AuthEnc::ChaCha20Poly1305](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AChaCha20Poly1305), [Crypt::AuthEnc::XChaCha20Poly1305](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3AXChaCha20Poly1305), [Crypt::AuthEnc::SIV](https://metacpan.org/pod/Crypt%3A%3AAuthEnc%3A%3ASIV) - 哈希函数 [Crypt::Digest::BLAKE2b\_160](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_160), [Crypt::Digest::BLAKE2b\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_256), [Crypt::Digest::BLAKE2b\_384](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_384), [Crypt::Digest::BLAKE2b\_512](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2b_512), [Crypt::Digest::BLAKE2s\_128](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2s_128), [Crypt::Digest::BLAKE2s\_160](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2s_160), [Crypt::Digest::BLAKE2s\_224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2s_224), [Crypt::Digest::BLAKE2s\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ABLAKE2s_256), [Crypt::Digest::CHAES](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ACHAES), [Crypt::Digest::MD2](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AMD2), [Crypt::Digest::MD4](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AMD4), [Crypt::Digest::MD5](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AMD5), [Crypt::Digest::RIPEMD128](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ARIPEMD128), [Crypt::Digest::RIPEMD160](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ARIPEMD160), [Crypt::Digest::RIPEMD256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ARIPEMD256), [Crypt::Digest::RIPEMD320](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ARIPEMD320), [Crypt::Digest::SHA1](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA1), [Crypt::Digest::SHA224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA224), [Crypt::Digest::SHA256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA256), [Crypt::Digest::SHA384](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA384), [Crypt::Digest::SHA512](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA512), [Crypt::Digest::SHA512\_224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA512_224), [Crypt::Digest::SHA512\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA512_256), [Crypt::Digest::Tiger192](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ATiger192), [Crypt::Digest::Whirlpool](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AWhirlpool), [Crypt::Digest::Keccak224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKeccak224), [Crypt::Digest::Keccak256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKeccak256), [Crypt::Digest::Keccak384](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKeccak384), [Crypt::Digest::Keccak512](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKeccak512), [Crypt::Digest::SHA3\_224](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_224), [Crypt::Digest::SHA3\_256](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_256), [Crypt::Digest::SHA3\_384](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_384), [Crypt::Digest::SHA3\_512](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHA3_512), [Crypt::Digest::SHAKE](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASHAKE), [Crypt::Digest::TurboSHAKE](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ATurboSHAKE), [Crypt::Digest::KangarooTwelve](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3AKangarooTwelve), [Crypt::Digest::SM3](https://metacpan.org/pod/Crypt%3A%3ADigest%3A%3ASM3) - 校验和 [Crypt::Checksum::Adler32](https://metacpan.org/pod/Crypt%3A%3AChecksum%3A%3AAdler32), [Crypt::Checksum::CRC32](https://metacpan.org/pod/Crypt%3A%3AChecksum%3A%3ACRC32) - 消息认证码 [Crypt::Mac::BLAKE2b](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3ABLAKE2b), [Crypt::Mac::BLAKE2s](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3ABLAKE2s), [Crypt::Mac::F9](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AF9), [Crypt::Mac::HMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AHMAC), [Crypt::Mac::KMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AKMAC), [Crypt::Mac::OMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AOMAC), [Crypt::Mac::Pelican](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3APelican), [Crypt::Mac::PMAC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3APMAC), [Crypt::Mac::XCBC](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3AXCBC), [Crypt::Mac::Poly1305](https://metacpan.org/pod/Crypt%3A%3AMac%3A%3APoly1305) - 公钥密码学 [Crypt::PK::RSA](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ARSA), [Crypt::PK::DSA](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ADSA), [Crypt::PK::ECC](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AECC), [Crypt::PK::DH](https://metacpan.org/pod/Crypt%3A%3APK%3A%3ADH), [Crypt::PK::Ed25519](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AEd25519), [Crypt::PK::X25519](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AX25519), [Crypt::PK::Ed448](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AEd448), [Crypt::PK::X448](https://metacpan.org/pod/Crypt%3A%3APK%3A%3AX448) - 密码学安全的随机数生成器 [Crypt::PRNG::Fortuna](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AFortuna), [Crypt::PRNG::Yarrow](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AYarrow), [Crypt::PRNG::RC4](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3ARC4), [Crypt::PRNG::Sober128](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3ASober128), [Crypt::PRNG::ChaCha20](https://metacpan.org/pod/Crypt%3A%3APRNG%3A%3AChaCha20) - 密钥派生函数 [Crypt::KeyDerivation](https://metacpan.org/pod/Crypt%3A%3AKeyDerivation) - ASN.1 解析器 [Crypt::ASN1](https://metacpan.org/pod/Crypt%3A%3AASN1) 仅当你需要自定义 ASN.1 / DER 解析或编码时才使用 `Crypt::ASN1`。 大多数常见的密钥和证书格式已经由 PK 模块处理。 - 杂项辅助函数 [Crypt::Misc](https://metacpan.org/pod/Crypt%3A%3AMisc) (base64/base32/base58 编解码器、PEM 辅助函数、常数时间比较、UUID 生成、八位字节递增辅助函数及相关实用函数) ## 诊断函数 这些底层函数暴露了内置 LibTomCrypt 构建的详细信息。 它们旨在用于故障排除和错误报告,而不是常规使用。 ### ltc\_build\_settings ``` my $str = CryptX::ltc_build_settings(); ``` 返回一个多行字符串,描述构建内置 LibTomCrypt 库时启用的 每个编译时选项(密码、哈希、 MAC、PK 算法、编译器标志等)。 ### ltc\_mp\_name ``` my $name = CryptX::ltc_mp_name(); # 例如 "LTM" (LibTomMath) ``` 返回正在使用的数学提供者后端的名称。 ### ltc\_mp\_bits\_per\_digit ``` my $bits = CryptX::ltc_mp_bits_per_digit(); # 例如 60 ``` 返回数学提供者使用的每个数字的位数。 ## Math::BigInt 后端 CryptX 的一部分是 [Math::BigInt::LTM](https://metacpan.org/pod/Math%3A%3ABigInt%3A%3ALTM),这是一个基于 内置 LibTomMath 库构建的 [Math::BigInt](https://metacpan.org/pod/Math%3A%3ABigInt) 后端。它与上述的 密码学 API 是分开的,但它随同一个发行版发布,并使用了 LibTomCrypt 所依赖的同一个大整数引擎。 # 许可证 本程序是自由软件;你可以根据与 Perl 本身相同的条款重新分发和/或修改它。 # 版权 版权所有 (c) 2013-2026 DCIT, a.s. [https://www.dcit.cz](https://www.dcit.cz) / Karel Miko
标签:CVE, Perl, 加密解密, 哈希算法, 安全随机数, 密码学库, 数字签名