
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 معظم حالات الاستخدام. أما واجهة 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 هو الافتراضي؛ فهو مسرَّع بالأجهزة على معظم المعالجات الحديثة.
استخدم Crypt::Checksum::CRC32 وCrypt::Checksum::Adler32 فقط لفحوصات السلامة غير العدائية مثل اكتشاف التلف العرضي. فهي ليست آليات نزاهة أو مصادقة تشفيرية. للاستخدام التشفيري، يُفضَّل Crypt::Digest أو Crypt::Mac أو وضع AEAD من Crypt::AuthEnc.
تبلغ معظم وحدات CryptX عن الأخطاء باستدعاء croak (من Carp).
المعاملات غير الصالحة، والخوارزميات غير المدعومة، وأحجام المفاتيح الخاطئة، والمدخلات
التالفة، وفشل المكتبات الداخلية عادةً ما تستدعي croak برسالة وصفية. التقط
الاستثناءات باستخدام eval أو Try::Tiny.
تستخدم بعض الدوال المساعدة بنمط التحقق قيمة إرجاع بدلاً من استدعاء croak. أهم
الأمثلة هي دوال *_decrypt_verify في وحدات
التشفير المصادَق عليه Crypt::AuthEnc::*.
تُرجع هذه 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, , , , , , , , , , , , ,
-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::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, ,
تكشف هذه الدوال منخفضة المستوى عن تفاصيل بناء LibTomCrypt المرفق. وهي مخصصة لاستكشاف الأخطاء والإبلاغ عن الأخطاء، وليس للاستخدام المنتظم.
my $str = CryptX::ltc_build_settings();
يُرجع سلسلة متعددة الأسطر تصف كل خيار من خيارات وقت الترجمة الذي تم تمكينه عند بناء مكتبة LibTomCrypt المرفقة (الشفرات، التجزئات، رموز MAC، خوارزميات المفتاح العام، أعلام المترجم، إلخ).
my $name = CryptX::ltc_mp_name();
# e.g. "LTM" (LibTomMath)
يُرجع اسم الواجهة الخلفية لمزوّد الرياضيات المستخدم.
my $bits = CryptX::ltc_mp_bits_per_digit();
# e.g. 60
يُرجع عدد البتات لكل خانة رقمية يستخدمها مزوّد الرياضيات.
جزء من CryptX هو Math::BigInt::LTM، وهي واجهة خلفية لـ Math::BigInt مبنية على مكتبة LibTomMath المرفقة. وهي منفصلة عن واجهات برمجة التطبيقات التشفيرية أعلاه، ولكنها تأتي في نفس التوزيعة وتستخدم نفس محرك الأعداد الكبيرة الذي يعتمد عليه 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
دوال التجزئة
دوال اشتقاق المفاتيح
محلل ASN.1
استخدم Crypt::ASN1 فقط عندما تحتاج إلى تحليل أو ترميز ASN.1 / DER مخصص.
معظم صيغ المفاتيح والشهادات الشائعة تتم معالجتها بالفعل بواسطة وحدات PK.
أدوات مساعدة متنوعة
Crypt::Misc (برمجيات ترميز base64/base32/base58، أدوات مساعدة لـ PEM، مقارنة زمنية ثابتة، توليد UUID، أدوات مساعدة لزيادة الأوكتيت، ودوال مساعدة ذات صلة)