
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);
बंडल की गई LibTomCrypt लाइब्रेरी पर निर्मित Perl क्रिप्टोग्राफ़िक मॉड्यूल। वितरण में Math::BigInt::LTM भी शामिल है, जो Math::BigInt बैकएंड है जो बंडल की गई LibTomMath लाइब्रेरी पर निर्मित है और 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 डिफ़ॉल्ट है; यह अधिकांश आधुनिक CPUs पर हार्डवेयर-त्वरित है।
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 लौटाते हैं, जो इंगित करता है कि सिफरटेक्स्ट के साथ छेड़छाड़ की गई थी
या गलत कुंजी/नॉन्स का उपयोग किया गया था। अन्य मॉड्यूलों में कुछ पार्सर/डिकोडर सहायक
विकृत इनपुट के लिए भी 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 लाइब्रेरी के निर्माण के समय सक्षम था (सिफर, हैश, MACs, PK एल्गोरिदम, कंपाइलर फ़्लैग, आदि)।
my $name = CryptX::ltc_mp_name();
# e.g. "LTM" (LibTomMath)
उपयोग में आने वाले गणित प्रदाता (math provider) बैक-एंड का नाम लौटाता है।
my $bits = CryptX::ltc_mp_bits_per_digit();
# e.g. 60
गणित प्रदाता द्वारा उपयोग किए जाने वाले प्रति अंक (digit) बिट्स की संख्या लौटाता है।
CryptX का एक हिस्सा Math::BigInt::LTM है, जो Math::BigInt बैकएंड है जो बंडल किए गए LibTomMath लाइब्रेरी पर आधारित है। यह ऊपर दिए गए क्रिप्टोग्राफ़िक APIs से अलग है, लेकिन यह उसी वितरण में शामिल होता है और उसी बड़े-पूर्णांक (big-integer) इंजन का उपयोग करता है जिस पर LibTomCrypt निर्भर करता है।
यह प्रोग्राम मुक्त सॉफ़्टवेयर है; आप इसे Perl के समान शर्तों के अंतर्गत पुनर्वितरित और/या संशोधित कर सकते हैं।
कॉपीराइट (c) 2013-2026 DCIT, a.s. https://www.dcit.cz / Karel Miko
ब्लॉक सिफर मोड
Crypt::Mode::CBC, Crypt::Mode::CFB, Crypt::Mode::CTR, Crypt::Mode::ECB, Crypt::Mode::OFB
स्ट्रीम सिफर
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 पार्सर
Crypt::ASN1 का उपयोग केवल तब करें जब आपको कस्टम ASN.1 / DER पार्सिंग या एन्कोडिंग की आवश्यकता हो।
अधिकांश सामान्य कुंजी और प्रमाणपत्र प्रारूप पहले से ही PK मॉड्यूल द्वारा संभाले जाते हैं।
विविध सहायक
Crypt::Misc (base64/base32/base58 कोडेक, PEM सहायक, constant-time तुलना, UUID जनरेशन, ऑक्टेट इंक्रीमेंट सहायक, और संबंधित उपयोगिता फ़ंक्शन)