
أداة تشفير مكتوبة بلغة 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 معظم حالات الاستخدام. أما واجهة OO API
والغلافات الخاصة بالخوارزميات (Crypt::PRNG::ChaCha20, Crypt::PRNG::Fortuna، وغيرها)
فهي مخصصة أساسًا للتدفقات الحتمية أو للتوافق البيني مع PRNG محدد.random_v4uuid
للمعرّفات العشوائية المبهمة. واستخدم random_v7uuid عندما تريد معرّفات مرتبة زمنيًا تقريبًا
تُفرز حسب وقت الإنشاء بدقة ملي ثانية. معرّفات UUID هي معرّفات وليست بديلاً عن
البايتات العشوائية السرية.تقوم شفرات التدفق بتشفير البيانات بايتًا بايت دون حشو الكتل. لمعظم التطبيقات، يُفضَّل وضع AEAD (انظر أعلاه) الذي يجمع بين التشفير والمصادقة. استخدم شفرات التدفق المجردة فقط عندما تتعامل مع المصادقة بشكل منفصل.
استخدم هذه فقط عندما تكون المصادقة معالجة بشكل منفصل أو غير مطلوبة: