الدليل التقني
الدليل التقني الكامل: البنية وصيغة .nik، ومحرك الضغط وترميزات الوسائط، وتصميم التشفير والمقاومة الكمومية، والتقوية، وكل الاختبارات المعيارية، وملاحظات البناء والاختبار وخارطة الطريق.
1 مقدمة
.nik. وقد صُمِّم حول أربعة أفكار: ضغط أفضل من الأدوات الراسخة، وأداء أسرع، وحماية البيانات بتشفير حديث، والعمل دون تغيير على Windows وmacOS وLinux كملف تنفيذي واحد صغير.1.1 أهداف التصميم
الحجم الصغير. التفوق على RAR 7 في البيانات التي يؤرشفها الناس فعلاً بكميات كبيرة. يُكتشف الصوت والصور وموسيقى tracker من المحتوى وتُضغَط بمرمّزات ضغط بلا فقدان متخصصة؛ أما البقية فتستخدم تدفق Zstandard مُعدَّلاً ومتعدد الخيوط. السرعة. يجب أن يكون القيد في الضغط والاستخراج هو القرص، لا المعالج. عند مستوى السرعة -m2 يضغط nikpak نحو 200 MB من ملفات المصدر في أقل من ثانية على نواة واحدة. الأمان. تشفير موثَّق مع دالة اشتقاق مفتاح مستهلكة للذاكرة، وأسماء الملفات مخفية دائماً، واكتشاف العبث دائماً، ومستخرِج لا يمكن خداعه ليكتب خارج مجلد الوجهة. مقاومة الحوسبة الكمومية. يُستخدم تشفير متماثل بطول 256 بتاً فقط. لا توجد أي شيفرة RSA أو منحنيات إهليلجية أو Diffie-Hellman في أي مكان داخل nikpak، لذلك لا يوجد ما يمكن لخوارزمية Shor كسره. قابل للنقل والبرمجة النصية. ملف تنفيذي واحد مرتبط استاتيكياً، وسطر أوامر متوافق مع RAR، وأكواد خروج يمكن التنبؤ بها، وخيار -helpيوثق كل خيار.
1.2 النتائج في لمحة
| 0.9 s | ||
جميع القياسات جاءت من جهاز واحد (آلة افتراضية Linux x86-64، نواة معالج واحدة) باستخدام RAR 7.00 وnikpak 1.1.0. واستُخرج كل أرشيف مرة أخرى وقورن بالأصل بايتاً ببايت. الطريقة الكاملة، ومجموعات البيانات، والحالات التي يكون فيها RAR أسرع موصوفة في الفصل 11. |
1.3 لمن هو موجَّه؟
1.4 كيف تقرأ هذا الدليل
1.5 المجتمع والتواصل
Telegramhttps://t.me/cryptonikko Xhttps://x.com/cryptonikkoid Discordhttps://discord.com/users/1537826350759415811
2 نظرة عامة على الميزات
2.1 الإمكانات
2.2 nikpak وRAR جنباً إلى جنب
|
| ||
|---|---|---|
| 9.7 - 16.7 s (-m3) | ||
3 مرجع سطر الأوامر
nikpak [options] [files...]. يمكن أن تظهر الخيارات في أي مكان قبل اسم الأرشيف أو بعده؛ وينهي -- تحليل الخيارات.3.1 الأوامر
a | .nik عندما لا يكون للاسم امتداد. وتُجتاز المجلدات دائماً بشكل تكراري. |
x | -d dir) الوجهة. |
e | |
l | |
v | |
lb | |
t | |
p | |
d | |
mt | |
(none) |
3.2 الخيارات
-p |
-e | |
-p |
-P | |
-hp[password] |
| |
-m0
.. -m5 |
-0
.. -9 | |
-mt |
| |
-mc- / -mc+ |
| |
-r |
| |
-ep |
-j | |
-ep1 |
| |
-o+ |
-o | |
-o- |
-n | |
-or |
| name (1).ext. |
-y |
| |
-x |
-x | |
-d |
-d | x وe. |
-inul -idq |
-q | |
@listfile |
| |
-h -help -? |
| -V رقم الإصدار. |
-s و-ma5 و-md64m و-ibck و-idp و-rr و-ts* و-w وما شابهها) تُقبَل وتُتجاهَل، حتى تستمر إعدادات الأدوات الموجودة في العمل. أي شيء آخر يولِّد رسالة خطأ واضحة وكود خروج 7.nikpak --add و--add-here العناصر المعطاة في أرشيف جديد، ويضيف nikpak --install-menu و--uninstall-menu قائمة النقر الأيمن أو يزيلها (--all-users للتثبيت لجميع المستخدمين)، ويقود unNik --extract و--extract-here و--extract-to عملية الاستخراج من القائمة.3.3 كلمات المرور بالتفصيل
-p، يحدد nikpak كلمة المرور بهذا الترتيب، ولا يفشل أبداً لمجرد عدم إمداد أي كلمة:-pأو-Pعلى سطر الأوامر: تُستخدم كما هي (8 أحرف كحد أدنى).متغير البيئة NIKPAK_PASSWORD، الذي يُبقي كلمة المرور خارج قائمة العمليات.مطالبة تفاعلية، تُسأل مرتين للتأكيد. يولِّد الإدخال الفارغ كلمة مرور عشوائية. بدون طرفية (على سبيل المثال داخل واجهة رسومية)، كلمة مرور تُمرَّر عبر stdin؛ وإن لم توجد، تُولَّد كلمة مرور عشوائية.
3.4 أكواد الخروج
| 0 |
| |
| 1 | ||
| 2 | ||
| 3 | ||
| 7 | ||
| 10 | ||
| 11 |
3.5 أمثلة
nikpak a backup.nik C:\Docs\*.txt Photos\ # create an archive
nikpak a -m5 -mt8 big.nik Projects\ # maximum, 8 threads
nikpak a -p secret.nik Taxes2026\ # encrypted, prompts
nikpak a -pMyLongPassw0rd s.nik f.pdf # password given
nikpak x backup.nik C:\Restore\ # extract with paths
nikpak e backup.nik *.jpg C:\Pics\ # only *.jpg, flat
nikpak x backup.nik Docs/report.pdf # extract ONE file
nikpak e backup.nik Docs/report.pdf -d C:\Out # one file, no path
nikpak x backup.nik Photos -d C:\Restore # one folder
nikpak l backup.nik *.pdf # list only PDFs
nikpak p backup.nik notes.txt # show a file
nikpak d backup.nik Temp *.bak # delete entries
nikpak l backup.nik # list
nikpak t secret.nik # test (asks password)
nikpak mt song.wav tracker.mod photo.bmp # which filter wins?
3.6 التكامل مع Total Commander والواجهات الأمامية الأخرى
a وx وe وl وt و@listfile و-p و-ep1 و-o+ و-y و-m)، يمكن لأي برنامج قادر على تشغيل rar.exe خارجي أن يشغِّل nikpak.exe. في Total Commander، سجِّل الامتداد nik ضمن Configuration, Packer, Additional packer programs ووجِّه أمري الضغط وفك الضغط إلى nikpak.exe. استخدم -o+ أو -y للاستخراج دون تدخل بشري، لأنه بدون طرفية لا يستطيع nikpak أن يسأل عما إذا كان يجب الكتابة فوق الملفات وسيتخطى الملفات الموجودة بدلاً من ذلك. تختلف أسماء القوائم بين إصدارات Total Commander؛ راجع مساعدته المدمجة لمعرفة الحقول بدقة.المسار الموضوع بين علامتَي اقتباس وينتهي بشرطة مائلة خلفية، مثل "C:\My Folder\"، يفسِّره Windows بشكل خاطئ (تُعامَل علامة الاقتباس الأخيرة على أنها مُهرَّبة). وللوجهات التي تحتوي مسافات استخدم -d "C:\My Folder" بدلاً من ذلك. |
3.7 الواجهة الرسومية

أفلِت ملفاً أو مجلداً، أو عدة عناصر دفعة واحدة، على النافذة، أو انقر الدائرة (أو الرابطين choose files / choose a folder) لاختيارها في مربع حوار؛ ويُظهر النقر على الدائرة الزرَّين Choose files وChoose a folder داخل الحلقة. تُضغَط العناصر بأفضل ضغط (-m5) في أرشيف واحد يُسمَّى باسم الملف (بدون امتداده) أو المجلد، أو باسم المجلد الذي جاءت منه عند وجود عدة عناصر. لا يُكتب فوق أرشيف موجود أبداً: يصبح report.nik هو report (2).nik. يُعرض التقدّم كنسبة مئوية كبيرة داخل عداد دائري، مع المرحلة (analysing وcompressing وfinishing)، والكمية المعالجة، والوقت. يوقف زر Cancel تحتها (أو مفتاح Esc) الضغط الطويل فوراً ويزيل الأرشيف غير المكتمل؛ وتبقى النافذة مفتوحة للعنصر التالي. إغلاق النافذة أثناء الضغط يفعل الشيء نفسه. تم: تتحول الحلقة إلى اللون الأخضر وتعرض اسم الأرشيف وحجمه مقابل الأصل والوقت. يفتح Show in folder الأرشيف في Explorer أو Finder أو مدير الملفات؛ ويبدأ Compress more (أو النقر على الدائرة) الأرشيف التالي. Save to: يمكن كتابة مجلد الوجهة في الأسفل أو اختياره بزر Browse. يُتذكَّر للمرة التالية (Windows: %APPDATA%\nikpak\settings.txt؛ macOS: ~/Library/Application Support/nikpak؛ Linux: ~/.config/nikpak). وفي المرة الأولى يكون سطح المكتب. المجتمع: تفتح الأزرار الدائرية الثلاثة أسفل اليمين صفحات nikpak على Telegram وX وDiscord (القسم 1.5). التبديل إلى unNik: يغلق الزر الدائري الذي يحمل سهماً للأعلى، يسار زر i، برنامج NikPak ويشغِّل unNik (القسم 3.9). بعد الضغط، يفتح هذا الزر ورابط Open in unNik على شاشة الإتمام الأرشيف الجديد فوراً. ويُعطَّل الزر أثناء الضغط. فتح مجلد الوجهة: يفتح زر المجلد الموجود بين حقل Save to وBrowse ذلك المجلد في Explorer أو Finder؛ وبعد الضغط يفتحه مع تحديد الأرشيف الجديد. الأصوات: نقرة خفيفة للأزرار والروابط والخيارات، وصوت قصير لكل إجراء (بدء العمل، النجاح، الخطأ، الإلغاء، تبديل البرنامج، مرور الملفات فوق النافذة). وهي مصنوعة من البرنامج نفسه، دون ملفات صوتية. يشغِّلها زر مكبر الصوت في شريط العنوان ويطفئها؛ وهي مفعَّلة افتراضياً، ويُشارَك هذا الاختيار مع unNik. اللغة: يفتح الزر أسفل اليسار، الذي يحمل علماً واسم اللغة بلغتها، قائمة باللغات العشر الأكثر تحدثاً في العالم (Ethnologue 2025): English و中文 (Mandarin Chinese) وहिन्दी (Hindi) وEspañol والعربية (Arabic) وFrançais وবাংলা (Bengali) وPortuguês وРусский (Russian) وBahasa Indonesia. اختيار إحداها يحفظها ويعيد تشغيل nikpak بتلك اللغة. في المرة الأولى، يتبع nikpak لغة Windows (أو النظام)، وإلا الإنجليزية. ويبقى سطر الأوامر بالإنجليزية. التشغيل كمسؤول: لا يسمح Windows بسحب الملفات من Explorer إلى برنامج يعمل كمسؤول. عند تشغيل nikpak.exe كمسؤول (على سبيل المثال من PowerShell مسؤول)، يعيد تشغيل نفسه مرة واحدة كمستخدم عادي عبر Explorer حتى يعمل السحب والإفلات. وإن تعذَّر ذلك، تعرض النافذة إشعاراً؛ فاختر الملفات بالأزرار بدلاً من ذلك. الحالة وحول: يعرض أعلى اليسار EVALUATION COPY · REGISTER (يفتح النقر مربع التسجيل) أو REGISTERED TO مع حامل الترخيص. يفتح زر i الصغير أعلى اليمين، بجانب التصغير والإغلاق، مربع About: الإصدار، و© 2026 Nicolas Choukroun، من توزيع Nikkoid LLC، وحالة الترخيص، والموقع الإلكتروني، وشروط الترخيص (LICENSE.txt).
cargo build --release --no-default-features.
3.8 الترخيص والتسجيل (برنامج shareware)


يظهر التذكير عندما تفتح نسخة غير مسجَّلة نافذتها. وله زران، Register وTest for free، يتغير ترتيبهما الأيمن/الأيسر عشوائياً عند كل تشغيل. يغلقه Test for free (أو Esc)؛ ثم يعمل nikpak دون أي قيود. يطلب مربع التسجيل الاسم وعنوان البريد الإلكتروني ومفتاح الترخيص. يجب أن تتطابق الثلاثة: فالمفتاح توقيع للاسم والبريد الإلكتروني. لا يهمّ اختلاف حالة الأحرف ولا المسافات الزائدة ولا الأحرف المتشابهة O/0 وI/L/1. يفتح Buy a licence الرابط https://nikpak.nikkoid.com/buy.php. بمجرد التسجيل لا يسأل nikpak مرة أخرى على ذلك الجهاز لذلك المستخدم. يُخزَّن الترخيص في %APPDATA%\nikpak\license.txt (macOS: ~/Library/Application Support/nikpak؛ Linux: ~/.config/nikpak). ويمكن للشركة بدلاً من ذلك وضع ملف nikpak.keyبجانب nikpak.exe، فيسجِّل كل مستخدمي ذلك الجهاز.سطر الأوامر: يسجِّل الأمر nikpak register "Jane Doe" jane@example.com NPK1-…؛ ويعرضnikpak licenseالحالة؛ ويزيلnikpak unregisterالترخيص. ويعرضnikpak -Vوnikpak -helpالحالة أيضاً. وتطبع النسخ غير المسجَّلة سطر إشعار تقييم واحد على مخرجات الخطأ (stderr)، وليس على المخرجات القياسية أبداً؛ ويكبتها -q.
كيف تعمل المفاتيح
NPK1- متبوعاً بـ108 أحرف في مجموعات من خمسة (Crockford base32). ويحتوي على نوع الترخيص (شخصي أو شركة)، وعدد المقاعد، وتوقيع Ed25519 على NIKPAK-LICENSE-1 والنوع والمقاعد والاسم وعنوان البريد الإلكتروني، كل منها مُطبَّع (المسافات مدموجة، أحرف صغيرة). يحتوي nikpak على المفتاح العام البالغ 32 بايتاً فقط، في src/license_pubkey.rs، لذا لا تتيح دراسة البرنامج لأي شخص صنع المفاتيح.nikpak-keygen (cargo run --release --features keygen --bin nikpak-keygen -- make --name "Jane Doe" --email jane@example.com؛ و--company --seats 25 للشركات؛ وينشئ newkeys زوج مفاتيح جديداً) أو على خادم الويب بأدوات PHP في server/ (PHP 7.2+ وMySQL 5.7)، التي تصدر مفتاحاً واحداً لكل عملية دفع وتنتج المفاتيح نفسها تماماً. يصف server/README.md الإعداد وسير الدفع.3.9 unNik، متصفح الأرشيف المجاني


التنقل بشجرة المجلدات ومسار التنقل (breadcrumbs) وBack وForward وUp (Alt+Left وAlt+Right وBackspace) والنقرات المزدوجة. يعثر Search (Ctrl+F) على الملفات بالاسم في الأرشيف كله؛ ويعرض كل نتيجة مجلدها. التحديد بالنقر، أو Ctrl+نقر، أو Shift+نقر، أو مربعات الاختيار، أو Ctrl+A، أو مفاتيح الأسهم. انقر عنوان عمود للفرز حسب الاسم أو الحجم أو النوع أو التاريخ. ويفتح النقر الأيمن قائمة بكل الإجراءات. استخراج الكل، أو التحديد (Ctrl+E): اختر الوجهة (افتراضياً مجلد باسم الأرشيف، بجانبه)، واحتفظ بالمجلدات أو لا، وما الذي يجب فعله عند وجود ملف مسبقاً: استبداله، أو الاحتفاظ بكليهما (name (1).ext)، أو تخطيه. تُنشأ الملفات المأخوذة من داخل مجلد بدون مسار ذلك المجلد، كما في WinRAR. وتتوقف القراءة مباشرة بعد آخر ملف مختار. العرض (F3، أو النقر المزدوج على ملف نصي): نص مع أرقام الأسطر، وبحث مع تمييز، والتفاف الأسطر، والنسخ؛ والملفات الثنائية بالنظام الست عشري. تُعرض أول 16 MB؛ ويفتح Open in Notepad الملف كاملاً. ويشغِّل Open الملف ببرنامجه الخاص (يُستخرج إلى مجلد مؤقت أولاً). يزيل Delete (Del) الملفات والمجلدات من الأرشيف بعد تأكيد. ولأن الأرشيف solid، يُعاد كتابته بدونها في ملف مؤقت لا يحل محل الأصل إلا عند نجاح كل شيء. تحتفظ الأرشيفات المشفرة بكلمة مرورها؛ وتحتفظ العناصر الأخرى بمرشِّح الوسائط أو Deflate ومحرك -m5 الخاص بها. يفك Test ضغط الأرشيف كله ويفحص كل ملف. ويعرض جزء details الحجم والتاريخ والمجلد وCRC32 وكيفية تخزين الملف وسماته؛ وبالنسبة للأرشيف نفسه يعرض حجمه وطريقته وتشفيره. ويعرض الملخص تحت الشجرة المساحة الموفَّرة. اللغات العشر نفسها، وزر اللغة، ومربع About (i)، وأزرار المجتمع كما في NikPak. وتُرسَم أسماء الملفات بأي نظام كتابة بخطوط النظام كخيار احتياطي. التبديل إلى NikPak: يغلق الزر الدائري الذي يحمل سهماً للأسفل، يسار زر i، برنامج unNik ويشغِّل NikPak. يوجد البرنامجان في المجلد نفسه. ويتشاركان ملف إعدادات واحداً، لذا تُستخدم اللغة المختارة في أحدهما في الآخر، وتتبع النافذة المفتوحة التغيير خلال ثانيتين. فتح مجلد الوجهة: يفتح الزر يسار زر الإخراج مجلد آخر عملية استخراج في Explorer أو Finder (وقبل أي استخراج، مجلد الأرشيف). يشغِّل unNik الأصوات نفسها التي يشغلها NikPak، مع أصوات لفتح الأرشيف والاستخراج والحذف والاختبار؛ ويتشارك زر مكبر الصوت خاصته مع زر NikPak في إعداد واحد.

3.10 الواجهات الجلدية
زر الواجهات الجلدية (لوحة ألوان، في شريط عنوان البرنامجين): يفتح قائمة الواجهات، حيث تُرسم كل واجهة بألوانها. يُظهر التمرير فوق واجهة معاينتها على النافذة كاملة؛ والنقر عليها يثبّتها؛ ويعيد Esc أو النقر خارجها إلى الواجهة التي كانت لديك. يبدِّل زر الشمس/القمر بجانبه بين Nikkoid Blue (الداكنة) وNikkoid Bright بنقرة واحدة. يقف صندوق الواجهات الجلدية خارج البرنامج. أثناء فتح الصندوق تتسع النافذة بعرض الصندوق إلى اليمين: يحتفظ البرنامج بلوحته 500 × 560 ويجلس الصندوق في المساحة الشفافة الإضافية بجانبها، بحيث تبقى الواجهة كاملة مرئية خلف الواجهة قيد التجربة. يمكن سحب الصندوق من شريط عنوانه مرة أخرى فوق البرنامج أو إلى أي مكان آخر في النافذة، وله زرا Apply Skin وCancel. تجرِّب النقرة على واجهة معاينتها على النافذة كاملة؛ ويحتفظ Apply بها ويحفظها للبرنامجين؛ ويعيد Cancel (أو Esc أو ×) إلى الواجهة التي كانت لديك. لم يعد النقر على البرنامج يغلق الصندوق. ولا تتسع نافذة unNik. تُحفَظ الواجهة المختارة ( skin=في ملف الإعدادات) وتُشارَك: الواجهة المختارة في أحد البرنامجين يأخذها الآخر خلال ثانيتين.واجهاتك الخاصة: يقرأ “Import a skin…” أسفل القائمة ملف Nikkomander .skin.json(اسماً وقائمة ألوان) وينسخه إلى مجلدskinsبجانب ملف الإعدادات؛ ويزيل علامة × الموجودة على بلاطة الواجهة المستوردة تلك الواجهة.تتراجع الواجهات المرسومة خلف الواجهة. تُرسم الخلفيات المرسومة بواسطة src/skin_scenes.rs، لا بتدرجات CSS، لذا تتكيف مع أي حجم نافذة. ومنذ الإصدار 1.6.2 تمر كل واحدة بتمريرةdiscreet()فيsrc/skin.rs: يُسحب الرسم نحو متوسطه المحلي، ويُموَّه قليلاً ويُمحى تدريجياً نحو لون خلفية الواجهة — أكثر ما يكون خلف حلقة الإفلات وعمود النص، وأكثر قليلاً فوق الشعار — بحيث يبقى العنوان والحلقة ونص الحالة واضحين على الواجهات الأربع عشرة.
3.11 قائمة مدير الملفات
nikpak --install-menu؛ macOS: إجراءات Finder السريعة).على الملفات والمجلدات: Add to archive… (يطلب الاسم والمجلد، ثم يضغط في نافذة NikPak) وAdd to archive here (يوضع الأرشيف بجانب العناصر، باسم مثل الإفلات على النافذة). على أرشيفات .nik: Open with unNik وExtract files… وExtract here وExtract to its own folder. تذهب عدة عناصر إلى أرشيف واحد؛ وتُستخرج عدة أرشيفات محددة واحداً تلو الآخر في نافذة واحدة. تعمل الأوامر عبر unNik.exe، فلا تومض نافذة طرفية؛ وتتبع التسميات لغة NikPak. يعرض Windows 10 القائمة الفرعية مباشرة، وWindows 11 ضمن Show more options (Shift+F10)؛ ويضيف Linux قوائم خدمات KDE Dolphin وإجراءات Nemo وسكربتات Nautilus، ويضيف macOS إجراءات Finder السريعة. خيارات سطر أوامر جديدة تستخدمها القائمة: nikpak --addو--add-here(لضغط العناصر المعطاة)، وnikpak --install-menuو--uninstall-menuو--all-users؛ وunNik --extractو--extract-hereو--extract-to. يعرض Extract here / to its own folder نافذة unNik الصغيرة مع حلقة التقدم (مربع كلمة المرور للأرشيفات المشفرة) ويغلقها عند استخراج كل شيء؛ وتبقى التحذيرات والأخطاء على الشاشة.برنامج إعداد ثانٍ، unnik--setup.exe، يثبِّت unNik وحده (المتصفح المجاني) لمن يستقبلون أرشيفات .nik فقط؛ وعندما يكون NikPak مثبتاً بالفعل فإنه يثبِّت البرنامج فقط، فلا تتكرر القوائم أبداً.
4 البنية
4.1 تدفق البيانات عند إنشاء أرشيف

Write القياسية ملفوفة حول التالية، بحيث يخدم مسار الكود نفسه أرشيفاً عادياً وأرشيفاً مشفراً وتجربة الوسائط.4.2 خريطة الكود المصدري
main.rs | nikpak lb x | head). |
cli.rs | -help الكامل. لا تستطيع مكتبات نمط Clap التعبير عن مفاتيح التبديل مثل -pSECRET أو -m5 بشكل نظيف. |
archive.rs | |
media.rs | |
nac.rs | |
bits.rs | |
crypto.rs | |
format.rs | |
util.rs | |
error.rs | |
engine.rs | |
recomp.rs | |
gui.rs | |
unnik.rs | |
lib.rs, bin/unnik.rs | |
license.rs | |
i18n.rs | |
textshape.rs |
4.3 إنشاء أرشيف خطوة بخطوة
التحقق من موقع الإخراج. لا يُستبدل أرشيف موجود إلا مع -o+(أو نعم تفاعلية)؛ وإلا يوضح nikpak أن الإلحاق غير مدعوم.جمع الإدخال: تُوسَّع أحرف البدل (PowerShell لا يفعل ذلك)، وتُقرأ ملفات @listfiles، وتُطبَّق الاستثناءات، ويُتخطَّى الروابط الرمزية والملفات الخاصة مع تحذير، ولا يُضاف الأرشيف إلى نفسه أبداً.تحديد كلمة المرور إذا طُلب التشفير (القسم 3.3) واشتقاق المفتاح باستخدام Argon2id. كتابة الترويسة، ثم بناء سلسلة الكاتبات: الملف، وكاتب مؤقت (buffered)، ومشفِّر المقاطع الاختياري، ومشفِّر Zstandard. كتابة كل عنصر. تمر ملفات الوسائط عبر الاكتشاف والتجربة (الفصل 7)؛ ويُنسخ كل شيء آخر قطعاً بحجم 256 KiB مع حساب CRC32. كتابة علامة النهاية مع عدد العناصر، وإنهاء إطار Zstandard، وختم المقطع المشفر الأخير، والتفريغ إلى القرص. إعادة تسمية name.nik.tmpإلىname.nik. إذا فشل أي شيء قبل ذلك، يحذف كائن حارس الملف المؤقت، فلا يستبدل أرشيف ناقص الكتابة أرشيفاً سليماً أبداً.
4.4 استخراج أرشيف خطوة بخطوة
قراءة الترويسة والتحقق منها: التوقيع السحري، والإصدار، والأعلام، والطريقة، وبالنسبة للأرشيفات المشفرة معاملات Argon2id، التي تُفحص نطاقاتها قبل تخصيص أي ذاكرة. الحصول على كلمة المرور واشتقاق المفتاح. ثم يثبت المقطع الموثَّق الأول صحة كلمة المرور أو ينفيها. اجتياز تدفق العناصر. يُنظَّف اسم كل عنصر (القسم 10.1) قبل أي وصول إلى نظام الملفات. كتابة الملفات باستخدام create_new، وتعيين الطوابع الزمنية والصلاحيات، والتحقق من CRC32 للبايتات المُعاد بناؤها. ويُحذف الملف الذي يفشل في CRC بدلاً من الإبقاء عليه.التحقق من نهاية الأرشيف: بعد علامة النهاية يجب أن ينتهي التدفق فعلاً، وإذا كان مشفراً يجب أن يكون المقطع الموثَّق الأخير قد عُولج. وهذا يكشف البتر والبيانات الملحقة.
4.5 الذاكرة والخيوط
-mt للحد منها). ويعمل فك الضغط والمرمّز الصوتي والتشفير على خيط الاستدعاء. يحتاج Argon2id إلى 64 MiB لاشتقاق المفتاح، ويستخدم المستويان الأعلى نافذة مطابقة بحجم 128 MiB، لذا يحتاج فك ضغط مثل هذه الأرشيفات إلى هذا القدر من الذاكرة.5 صيغة الحاوية .nik
.nik هو ترويسة ثابتة صغيرة يتبعها جسم. والجسم تدفق واحد solid: تُدمج جميع العناصر وتُضغط معاً وتُشفَّر اختيارياً. يضيف الإصدار 2 من الصيغة سجلات الوسائط؛ وتبقى أرشيفات الإصدار 1 قابلة للقراءة.5.1 الترويسة
| 0 | 8 | 89 4E 49 4B 0D 0A 1A 0A (فكرة PNG: يكتشف تلف النقل في وضع النص) | |
| 8 | 1 | ||
| 9 | 1 | ||
| 10 | 1 | ||
| 11 | 1 | 0 | |
| 12 | 4 | ||
| 16 | 4 | ||
| 20 | 4 | ||
| 24 | 16 | ||
| 40 | 19 |
5.2 سجلات العناصر
0 END | count:u64. يعلّم النهاية ويحدد عدد العناصر التي تسبقه. |
1 FILE | name_len:u16 name mtime:i64 mode:u32 size:u64 data[size] crc32:u32 |
2 DIR | name_len:u16 name mtime:i64 mode:u32 |
3 MEDIA | name_len:u16 name mtime:i64 mode:u32 size:u64 filter:u8 method:u8 params_len:u8 params framed_stream crc32:u32 |
الأسماء بصيغة UTF-8 مع فواصل /، وبحد أقصى 4096 بايت.mtimeهو ثواني Unix؛ وmodeهو كلمة صلاحيات Unix (تحصل ملفات Windows على 0644 أو 0755، و0444 عندما تكون للقراءة فقط).يغطي CRC32 دائماً البايتات الأصلية، وهو ما يجعل مرشِّحات الوسائط قابلة للتحقق. في سجل MEDIA يكون sizeهو الحجم الأصلي. وframed_streamسلسلة من مقاطع[u32 length][bytes]تنتهي بطول صفري، لذا يستطيع القارئ دائماً تخطي عنصر وسائط دون فهم مرشِّحه.
معاملات الوسائط
offset:u64 frames:u64 channels:u8 bits:u8 flags:u8 (بت العلم 0 = big endian، وبت 1 = بإشارة signed) | ||
offset:u64 width:u32 rows:u32 bpp:u8 stride:u32 | ||
none: the framed stream holds raw segments and recompressed Deflate streams (section 7.9) |
offset (الترويسات والوسوم واللوحات وأنماط MOD) وكل شيء بعد منطقة العينات أو البكسلات (المقاطع اللاحقة) دون تغيير حول البيانات المفلترة.5.3 تأطير الجسم المشفر
5.4 لماذا التدفق solid؟
5.5 التحكم في الإصدارات
5.6 الجسم متعدد المحركات (الإصدار 3)
6 محرك الضغط
6.1 لماذا Zstandard
6.2 ربط المستويات
-m0 .. -m5) ومستويات نمط zip (-0 .. -9) ويربطها بمستويات Zstandard:
-m0 | ||
-m1 | 1 | |
-m2 | 3 | |
-m3 | 9 | |
-m4 | 15 | |
-m5 (default) |
-0، وتستخدم -1 إلى -6 مستويات Zstandard من 1 إلى 6، ويستخدم -7 المستوى 9، و-8 المستوى 12، و-9 هو نفسه -m5.6.3 النافذة الكبيرة ومطابقة المسافات الطويلة
-m5 من 26.3 MB إلى 24.4 MB وعند -m4 من 29.5 MB إلى 26.8 MB، دون كلفة في السرعة لـ-m4 وكلفة صغيرة لـ-m5. وتقع نافذة 2^27 ضمن حد المفكِّك الافتراضي لـZstandard، لذا يمكن لأي مفكِّك قياسي قراءة البيانات.6.4 تعدد الخيوط
6.5 السلامة داخل التدفق
6.6 وضع التخزين (store)
-m0 العناصر دون ضغط. وهو مفيد للبيانات المضغوطة مسبقاً، وهو أيضاً الوضع الوحيد الذي تُتجاوز فيه مرشِّحات الوسائط عمداً: فالمستخدم الذي يطلب store لا يتوقع تحويل البيانات.6.7 المستوى الأقصى: LZMA2 وPPMd
الكتلة الثنائية. تُضغط المجلدات والملفات الثنائية وعناصر الوسائط والعناصر المعاد ضغطها بـDeflate باستخدام LZMA2: إعداد preset 9، وطول nice 273، وعمق باحث المطابقة 32، وقاموس بحجم البيانات (من 1 إلى 128 MiB). كتلة النصوص. تذهب الملفات التي لا تحتوي أول 64 KiB فيها على بايت صفري ولا أحرف تحكم تقريباً (الكود المصدري، والنصوص، وCSV، وHTML، وXML ...) إلى كتلة ثانية. تُضغط أربع مجموعات متجاورة بحجم 1 MiB من هذه الملفات تجريبياً باستخدام PPMd variant I (رتبة 8، ونموذج 192 MiB) وباستخدام LZMA2 المضبوط للنصوص (lc 4 وpb 0)، وتفوز النتيجة الأصغر. يفضَّل PPMd للنثر؛ وتفضل أشجار الكود المصدري الكبيرة التي تحتوي ملفات شبه متطابقة LZMA2، لأنه يستطيع نسخ التكرارات الطويلة عبر الملفات. الترتيب. داخل كل كتلة، تُرتَّب الملفات حسب الامتداد ثم حسب اسم الملف، كما يفعل 7-Zip، بحيث تتجاور الملفات المتطابقة أو المتشابهة. وبالتعاون مع عينة التجربة المتجاورة، جعل هذا مجموعة البيانات العامة أصغر بنسبة 7.5 %.
7 ذكاء الوسائط
7.1 الاكتشاف بالمحتوى
.dat ولا يُعثر على ملف نصي اسمه .wav.RIFF..WAVE، ومقطع fmt مع PCM صحيح (format 1، أو WAVE_FORMAT_EXTENSIBLE مع الصيغة الفرعية PCM)، و8/16/24/32 بتاً، ومن 1 إلى 8 قنوات، ومحاذاة كتلة متسقة؛ ثم مقطع data | ||
FORM..AIFF أو AIFC (الضغط NONE أو twos)، ومقطعا COMM وSSND، وعينات بإشارة وترتيب big endian | ||
BM، وترويسة DIB بحجم 40 بايتاً أو أكثر، وبدون ضغط، و8 أو 24 أو 32 بتاً لكل بكسل، وصفوف بكسلات تناسب الملف، ومنطقة بين 4 KiB و256 MiB |
7.2 التجربة: اختيار أفضل مرشِّح لكل ملف
أخذ عينة: منطقة العينات كاملة عندما يصل حجمها إلى 3 MiB، وإلا ثلاث نوافذ بحجم 768 KiB عند 5 % و45 % و85 % من الصوت. وبالنسبة للصور، الصفوف الأولى حتى نحو 4 MiB. ضغط العينة بـZstandard عادي بمستوى 3 (خط الأساس) وبكل مرشِّح ينطبق: NAC وShuffle وShuffle+Delta للصوت 16/24/32 بتاً؛ وNAC وShuffle+Delta للصوت 8 بتات؛ وMED للصور. الاحتفاظ بالمرشِّح صاحب أصغر تقدير، لكن فقط إذا تفوق على خط الأساس بنسبة 2 % على الأقل. وإلا يُخزَّن الملف بضغط عادي. كتابة الملف بالفائز. يحدث كل هذا لكل ملف على حدة، لذا يمكن لأرشيف واحد أن يحتوي ملفات WAV مرمَّزة بطرق مختلفة بجانب ملفات عادية.
nikpak mt القياس نفسه على الملف بالكامل ويطبع جدولاً، وهذه هي الطريقة التي استُكشف بها الاختبار المعياري في الفصل 11. وفي الخيارات، يعطِّل -mc- المرشِّحات ويجبر -mc+ المرشِّح الافتراضي دون تجربة.كل مرشِّح قابل للعكس تماماً. يُحسب CRC32 المخزَّن مع كل عنصر على البايتات الأصلية ويُفحص عند الاستخراج، ويتحقق مشفِّر NAC من كل كتلة أثناء الكتابة (القسم 7.4)، ويطفئ -mc- الطبقة كلها. |
7.3 مرمّز NAC الصوتي

الكتل وإزالة ارتباط الستيريو
| 0 | ||
| 1 | R = L - S | |
| 2 | L = R + S | |
| 3 | sum = (M << 1) | (S & 1), L = (sum + S) >> 1, R = (sum - S) >> 1 |
Side = L - R وMid = (L + R) >> 1. تحتاج القناة الجانبية بتاً واحداً أكثر من القناة العادية وتُرمَّز بـbits + 1. يُختار الوضع بكلفة منخفضة: يجمع المشفِّر القيم المطلقة لبواقي المتنبئ الثابت من الرتبة 2 لكل من L وR وM وS ويأخذ الزوج صاحب المجموع الأصغر. وبالنسبة للتسجيلات ذات القنوات شديدة الارتباط، يوفِّر Mid/Side عادة عدة نقاط مئوية.أنواع الإطارات الفرعية
المتنبئات الثابتة
order 0: e[i] = x[i]
order 1: e[i] = x[i] - x[i-1]
order 2: e[i] = x[i] - 2*x[i-1] + x[i-2]
order 3: e[i] = x[i] - 3*x[i-1] + 3*x[i-2] - x[i-3]
order 4: e[i] = x[i] - 4*x[i-1] + 6*x[i-2] - 4*x[i-3] + x[i-4]
order عينات في الكتلة حرفياً كقيم إحماء.الترميز التنبئي الخطي (LPC)
تطبيق نافذة Tukey (تدرّج تناقصي على الربعين الأول والأخير) على الكتلة، حتى لا تشوِّه حوافها الإحصاءات. حساب الارتباط الذاتي r[0..32]للإشارة المطبَّقة عليها النافذة.تشغيل استدعاء Levinson-Durbin، الذي ينتج مجموعة المعاملات المثلى لكل رتبة من 1 إلى 32 في تمريرة واحدة: k = (r[i] - sum a[j] r[i-j]) / err، وa[i] = k، وa[j] = a[j] - k a[i-j]، وerr = err (1 - k^2).تكمية المعاملات الحقيقية إلى أعداد صحيحة بدقة 12 أو 14 أو 15 بتاً (حسب عرض العينة)، مع اختيار مقياس من قوى الاثنين ( shift، من 0 إلى 20) بحيث يتسع أكبر معامل بالكاد. يستخدم التقريب تغذية راجعة للخطأ، فلا تتراكم أخطاء التكمية عبر المعاملات.تقييم عدة رتب (تعتمد المجموعة على مستوى الجهد، أدناه)، وحساب بواقي كل منها، والاحتفاظ بالرتبة ذات أصغر حجم إجمالي مقدَّر، بما في ذلك كلفة إرسال معاملاتها.
pred[i] = (q[0]*x[i-1] + q[1]*x[i-2] + ... + q[n-1]*x[i-n]) >> shift
e[i] = x[i] - pred[i] (n = order; the sum uses 64 bits)
ترميز البواقي
u = (e << 1) XOR (e >> 63)، بحيث تصبح القيم الموجبة والسالبة الصغيرة أعداداً صغيرة) وتُرمَّز بأكواد Rice المقسمة. يُقسَّم بواقي الكتلة إلى 2^p قسم (p من 0 إلى 8، يختاره المشفِّر)؛ ويحصل كل قسم على معامل Rice خاص به k (5 بتات). تُكتب القيمة بصيغة u >> k بالأحادي (ذلك العدد من الأصفار وواحد) يليه البتات k المنخفضة. يُشتق أفضل k لقسم من مجموع قيمه، لذا يمكن تقدير كلفة كل متنبئ مرشح بثمن بخس من المجاميع الجارية بدلاً من ترميزه.مستويات الجهد
-m) عدد رتب LPC التي تُجرَّب لكل كتلة. تعني الرتب الأكثر نتيجة أصغر قليلاً ومشفِّراً أبطأ؛ بينما تبقى سرعة المفكِّك كما هي.| -m1 | 0 | 8, 16 |
| -m2, -m3 | 1 | 4, 8, 12, 16, 24, 32 |
| -m4, -m5 | 2 | 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 24, 28, 32 |
تخطيط بتات الكتلة
block := [stereo mode: 2 bits] sub-frame [sub-frame] (byte-padded)
sub-frame := type:2 ...
CONSTANT : value:width
VERBATIM : wasted:5 samples:(n x (width - wasted))
FIXED : wasted:5 order:3 warm-up residual
LPC : wasted:5 order-1:5 precision-1:4 shift:5
coefficients warm-up residual
residual := partition-order:4 per partition: k:5 Rice-coded values
7.4 التحقق الذاتي
-mc-. ويُختبر مسار الاحتياط في اختبارات الوحدة، التي تجبر الترميز الحرفي لكل توليفة من عمق البتات وعدد القنوات، وتحوِّل الآلية خطأ فقدان بيانات صامتاً محتملاً إلى حالة مكتشفة قابلة للاسترداد.7.5 Shuffle وShuffle+Delta
يفصل Shuffle بايتات العينات إلى مستويات (planes): كل بايتات الأهمية الأقل للقناة 0، ثم كل بايتات الأهمية الأكبر للقناة 0، ثم القناة 1، وهكذا، في كتل من 32768 إطاراً. يكون مستوى البايتات العالية أملس ومستوى البايتات المنخفضة محدود الأبجدية جداً؛ فيصمغ مشفِّر الإنتروبيا في Zstandard كل منهما أفضل بكثير من الخليط المتشابك. يستبدل Shuffle+Delta أولاً كل عينة بفرقها عن العينة السابقة للقناة نفسها (بمقياس عرض العينة، لذا فهو قابل للعكس تماماً، مع حمل الحالة عبر الكتل) ثم يخلط. يساعد هذا عندما تكون الإشارة أملس لكن غير قابلة للتنبؤ بما يكفي ليفوز NAC.
-m2 و47 % عند -m5، مقابل 63 % لـZstandard العادي.7.6 ملفات ProTracker MOD
patterns = max(order table) + 1
sample_start = 1084 + patterns * 256 * channels (4 ch: 1024 B per pattern)
sample_bytes = sum of (length in words * 2) over the 31 descriptors,
clamped to the end of the file
7.7 صور BMP
تقسيم منطقة البكسلات إلى مستوى لكل قناة (B وG وR وA لـ32 بتاً)، مع تذكر بايتات الحشو لكل صف على حدة. إزالة ارتباط اللون. طرح مستوى الأخضر من المستويين الأزرق والأحمر (بمقياس 256). في الصور الفوتوغرافية تكون القنوات الثلاث شديدة الارتباط، لذا تكون الفروق صغيرة. التنبؤ بكل بكسل من جيرانه بمتنبئ MED (كاشف الحواف الوسيطي)، المستخدم في مرمّز الصور LOCO-I: بالنسبة لليسار aوالأعلىbوالأعلى-يسارc، يكون التنبؤmin(a,b)إذا كانc >= max(a,b)، وmax(a,b)إذا كانc <= min(a,b)، وa + b - cفيما عدا ذلك. يستبدل خطأ التنبؤ البكسل (بمقياس 256). على الحواف يتبع المتنبئ الحافة؛ وعلى التدرجات الناعمة يستقرئ التدرج.دمج مستويات البواقي وبايتات الحشو وترك Zstandard يضغطها. تصبح المناطق الناعمة سلاسل من بايتات قريبة من الصفر.
7.8 لماذا يتفوق هذا على RAR
7.9 مستندات Office وPDF وgzip: إعادة ضغط Deflate
الاكتشاف بالمحتوى. ترويسة ZIP محلية (PK\x03\x04) في بداية الملف، أو %PDF- أو ترويسة gzip؛ ولا يُستخدم الامتداد أبداً. فك الترميز. يُعثر على كل تدفق Deflate (عناصر ZIP بالطريقة 8، وتدفقات PDF بترويسة zlib، وكل عضو gzip) ويُحلَّل بـpreflate (مكتبة preflate-rs من Microsoft). يعيد preflate البيانات الصريحة إضافة إلى سجل تصحيحات صغير يصف بالضبط كيف اتخذ المشفِّر الأصلي خياراته، أياً كان ذلك المشفِّر. التخزين. يُخزَّن الملف كسلسلة من المقاطع الخام وأزواج (النص الصريح، التصحيحات). ثم يذهب XML الصريح أو وصف الصفحة إلى التدفق solid، حيث يضغطه LZMA2 إلى جزء صغير من حجمه بتنسيق Deflate. التحقق. قبل استخدام النتيجة، يعيد nikpak بناء كل تدفق Deflate ويقارن طول الملف كاملاً وCRC32 الخاص به مع الأصل. إذا اختلف أي شيء، أو فشل preflate أو هلع على ملف مشوه، يُخزَّن الملف ببساطة بشكل عادي. الاستخراج. يُعاد إنشاء تدفقات Deflate بتاً ببت، لذا يكون ملف .docx أو .pdf المستخرج مطابقاً بايتاً ببايت، ويُفحص CRC32 الخاص به كما لكل عنصر.
8 التشفير
8.1 نموذج التهديد
سرية محتويات الملفات و كل ما يتعلق بها: الأسماء والأحجام والطوابع الزمنية والصلاحيات وعدد الملفات. السلامة والأصالة: أي تغيير في الأرشيف، سواء في البيانات أو الترويسة أو ترتيب البيانات أو طولها، يُكتشف قبل قبول بيانات خاطئة. مقاومة التخمين: كل تخمين لكلمة المرور يُجعَل مكلفاً قدر الإمكان عملياً.
8.2 من كلمة المرور إلى المفتاح: Argon2id
| 3 | ||
| 4 | ||
8.3 XChaCha20-Poly1305 في بنية STREAM
nonce (24 bytes) = random prefix (19 bytes)
| chunk counter (4 bytes, big endian)
| last-chunk flag (1 byte)
u32 length + النص المشفر + وسم 16 بايتاً | |
8.4 ما يستطيع المراقب رؤيته وما لا يستطيعه
8.5 التعامل مع كلمات المرور
الطول الأدنى. 8 أحرف عند إنشاء أرشيف؛ وتُرفض كلمات المرور الأقصر مع توضيح. التأكيد. تسأل المطالبة التفاعلية مرتين، ولا تُظهر الأحرف المكتوبة، وترفض عدم التطابق. التوليد. بدون كلمة مرور، يسحب nikpak 24 حرفاً من أبجدية تضم 56 رمزاً تستبعد المتشابهات (0/O و1/l/I)، باستخدام أخذ العينات بالرفض على المولِّد العشوائي الآمن تشفيرياً في نظام التشغيل بحيث لا يكون أي رمز أكثر احتمالاً من غيره. أي 24 × log2(56)، نحو 139 بتاً من الإنتروبيا، وتُعرض مرة واحدة في مربع مميز بوضوح. نظافة الذاكرة. يُمسح المفتاح المشتق وسلاسل كلمة المرور من الذاكرة عندما لا تعود هناك حاجة إليها (حزمة zeroize).القنوات. سطر الأوامر ( -p)، أو متغير البيئةNIKPAK_PASSWORD، أو المطالبة التفاعلية، أو stdin عند غياب الطرفية. صيغة سطر الأوامر مريحة لكنها مرئية في قائمة العمليات؛ والأشكال الأخرى أفضل.
8.6 اختبارات الهجوم
يمكن دائماً تخمين كلمة المرور الضعيفة؛ يجعلها Argon2id مكلفة لكنه لا يستطيع إنقاذ password123. لم يُدقَّق nikpak تدقيقاً مستقلاً. ولا يستطيع الدفاع ضد مسجِّلات لوحة المفاتيح أو البرمجيات الخبيثة أو من يقرأ ذاكرة العملية قيد التشغيل. وبالنسبة للبيانات التي قد يسبب كشفها ضرراً جسيماً، اطلب من خبير تشفير مراجعة التطبيق أولاً. |
9 مقاومة الحوسبة الكمومية
9.1 ما الذي تغيره الحواسيب الكمومية
9.2 موقف nikpak
9.3 وماذا عن كلمة المرور؟
9.4 "اجمع الآن، وفك التشفير لاحقاً"
9.5 الحدود الصادقة والطريق إلى الأمام
تعني "مقاومة الحوسبة الكمومية" أنه لا توجد خوارزمية كمومية معروفة تتفوق على البحث العام ضد هذه البدائيات. وهي ليست إثباتاً؛ يستمر تحليل شيفرات ChaCha20 وArgon2، والصيغة مُرقَّمة الإصدارات بحيث يمكن تغيير المعاملات أو الخوارزميات. إذا أُضيفت مشاركة المفاتيح العامة يوماً (تشفير أرشيف بمفتاح المستلم)، فستستخدم مخططاً هجيناً، X25519 مدمجاً مع ML-KEM، بحيث يكون آمناً إذا صمد أي من المكونين. لا تحمي مقاومة الحوسبة الكمومية من أخطاء التنفيذ. انظر القسمين 8.6 و10.
10 التحصين والمتانة
10.1 الاستخراج الآمن
اختراق المسارات ("zip slip"). يُطبَّع اسم كل عنصر: تتحول الشرطات المائلة الخلفية إلى شرطات مائلة، وتُسقط المكونات الفارغة ومكوِّن .، ويتسبب أي مكوِّن..في تخطي العنصر مع تحذير. تفقد الأسماء المطلقة جذرها، لذا يُستخرج/etc/passwdداخل مجلد الوجهة.أسماء Windows. عند التشغيل على Windows، تُرفض المكونات التي تحتوي < > : " | ? *أو أحرف تحكم، أو تنتهي بمسافة أو نقطة، أو تساوي اسم جهاز محجوزاً (CON وPRN وAUX وNUL وCOM1-9 وLPT1-9).الروابط الرمزية. قبل الكتابة، يُفحص كل مكوِّن موجود من المسار الهدف تحت الوجهة؛ ولا يُتبع الرابط أبداً. يُحذف الملف الموجود أولاً ويُنشأ الجديد باستخدام create_new، الذي يرفض فتح مسار موجود، لذا لا يمكن استخدام رابط لإعادة توجيه الكتابة.بتات الامتياز. لا تُستعاد بتات setuid وsetgid وsticky أبداً؛ وتُقنَّع الصلاحيات إلى بتات rwx العادية. الملفات الفاشلة. يُحذف الملف الذي لا يطابق CRC32 الخاص به، ولا يُترك خلفه.
../../evil.txt و/tmp/evil.txt و..\..\evil.txt وok/../../evil.txt: لم يفلت أي شيء من الوجهة، وأُبلغ عن العناصر غير الآمنة وتُخطيت، ورُفض رابط رمزي مزروع في الوجهة.10.2 مفكِّكات محدودة الموارد
تُفحص نطاقات معاملات Argon2id قبل أي تخصيص (القسم 8.2). يجب أن يكون طول المقاطع المشفرة بين 16 بايتاً و64 KiB + 16؛ والأسماء بحد أقصى 4096 بايت؛ ويجب أن تعلن الكتل الصوتية طولاً معقولاً؛ وتُحدَّد مناطق BMP بـ256 MiB؛ وتُقيَّد أكواد Rice الأحادية. غُذّيت مفكِّكات الصوت والوسائط بآلاف المدخلات العشوائية وذات البتات المقلوبة في اختبارات الوحدة ويجب أن تعيد خطأً، ولا تهلع أو تُجهض أبداً. لا يحتوي كود nikpak نفسه على أي كتل unsafe، ويحوِّل فحص الحدود في Rust أي خطأ منطقي كان سيصبح خطأ إفساد ذاكرة في C إلى فشل نظيف.
t أولاً إذا كان ذلك يهمك.10.3 الإنشاء الآمن والأخطاء الصادقة
يُكتب الأرشيف إلى name.nik.tmpولا يُعاد تسميته إلا عند اكتماله؛ يحذف الحارس الملف المؤقت عند أي فشل، لذا لا يترك التشغيل المتقطع أرشيفاً ناقص الكتابة أو مستبدلاً أبداً.إذا أصبح الملف أقصر أثناء أرشفته، يجهض nikpak برسالة صريحة بدلاً من كتابة عنصر غير متسق. وتُتخطى الملفات غير القابلة للقراءة والروابط الرمزية والملفات الخاصة مع تحذير (كود خروج 1) ولا يُضاف الأرشيف إلى نفسه أبداً. تُصنَّف الأخطاء بحيث تستطيع السكربتات التفاعل: خطأ المجموع الاختباري أو الإطار داخل الأرشيف هو فساد (خروج 3)، وفشل التوثيق هو كلمة مرور خاطئة أو عبث (خروج 11)، والكتابة المرفوضة هي خطأ فادح (خروج 2).
11 الاختبارات المعيارية
11.1 المنهجية
-ma5)؛ وnikpak 1.1.0 مبني بوضع release مع LTO؛ وFLAC 1.x بخيار -8 كمرجع صوتي. | |
-m3 (افتراضي RAR) و-m5 (الأفضل). وبالنسبة لاختبار البيانات العامة أيضاً -s (solid) و-md256m (قاموس 256 MB)، لأن أرشيفات nikpak تكون solid دائماً والمقارنة العادلة تتطلب السماح لـRAR بالشيء نفسه. | |
cmp لملفات الوسائط، وSHA-256 لجميع الملفات الـ10,949 في المجموعة العامة). |
مادة الاختبار
الموسيقى اصطناعية: صُيِّرت من MIDI وتحتوي مقاطع متكررة، ما يساعد كل أداة قائمة على LZ، بما في ذلك مرحلة Zstandard بعد NAC. تحتوي التسجيلات الحقيقية على تكرارات دقيقة أقل، لذا ستختلف الأحجام المطلقة. تعامل المقارنة كل الأدوات بالمثل، وتؤكد نتيجة FLAC على الملف نفسه أن المرمّز الصوتي نفسه تنافسي، لكن على القراء أصحاب المواد المحددة قياسها: يفعل nikpak mt ذلك بالضبط. |
11.2 ملفات الوسائط
| 9,183,956 | 2,862,744 | 2,035,223 | 1,750,706 | ||
| 2,507,557 | 1,070,290 | 966,622 | 927,973 | ||
| 2,991,820 | 1,605,879 | 1,529,219 | 1,418,532 | ||
| 17,371,848 | 11,024,411 | 9,415,519 | 9,411,898 | ||
| 4,342,996 | 3,112,135 | 2,635,819 | 2,634,669 | ||
| 2,171,520 | 844,160 | 742,462 | 740,751 | ||
| 28,362,206 | 21,467,283 (-m3) | 18,689,529 | 18,688,030 |
-m3، لذا يكون ذلك الصف مقارنة أضعف من البقية.

ما الذي تضيفه مرشِّحات الوسائط
| 3,580,971 | 2,035,223 | 43.2 % | |
| 1,260,607 | 966,622 | 23.3 % | |
| 1,876,722 | 1,529,219 | 18.5 % | |
| 15,585,422 | 9,415,519 | 39.6 % | |
| 3,887,183 | 2,635,819 | 32.2 % | |
| 1,078,493 | 742,462 | 31.2 % |
المقارنة مع FLAC
-8، المشفِّر المرجعي المتخصص، 9,407,019 بايتاً. تيار NAC للصوت نفسه هو 9,425,305 بايتاً، ضمن 0.2 %، وأرشيف nikpak النهائي 9,415,519 بايتاً. وبالنسبة لنسختي الأحادي 22 kHz و8 بتات يكون NAC أصغر من FLAC (2,635,446 مقابل 2,638,954، و785,890 مقابل 798,810 لمنطقة الصوت وحدها)، وبالنسبة لـ24 بتاً يكون الأرشيف (18.69 MB) أصغر من 19.12 MB لـFLAC. ويكون FLAC أضعف بكثير على ملفات المعرض (2.50 MB مقابل 1.61 MB لـRAR)، للسبب المشروح في القسم 7.5؛ وهذه هي الحالة التي تستحق فيها المرشِّحات الأخرى مكانها.11.3 البيانات العامة
| 24,443,483 | 45.6 s | 1.8 s | |
| 25,862,475 | 36.2 s |
| |
| 26,002,812 | 26.7 s |
| |
| 26,536,863 | 16.7 s | 1.5 s | |
| 26,814,023 | 13.5 s |
| |
| 30,329,965 | 2.0 s |
| |
| 36,266,743 | 0.9 s | 0.8 s | |
| 50,851,230 | 14.8 s |
| |
| 50,974,773 | 9.7 s | 2.3 s |

المستوى الأقصى: ينتج nikpak أرشيفاً أصغر بنسبة 5.5 % من أفضل ما ينتجه RAR (24.4 مقابل 25.9 MB). ويكون RAR أسرع عند هذا المستوى (26.7 إلى 36.2 ثانية مقابل 45.6 ثانية). تساوي الحجم: يكون nikpak -m4ضمن نحو 1 % من مستوى RAR الافتراضي solid في 81 % من الوقت (13.5 ثانية مقابل 16.7 ثانية).المستويات السريعة: يقايض -m2النسبة بالسرعة: أسرع 18 مرة من RAR solid-m3، وأكبر بنسبة 37 %. هذا هو المستوى المناسب للنسخ الاحتياطية وخطوط الأنابيب حيث يكون الوقت أهم من آخر بضعة ميغابايتات.غير solid: تكون أرشيفات RAR الافتراضية (غير solid) ضعف حجم أرشيفاته solid تقريباً على بيانات كثيرة الملفات الصغيرة هذه. على من يقارن nikpak بـRAR أن يضيف -sإلى RAR.
11.4 السرعة على ملف وسائط كبير واحد

| 1.45 s (-m2) | 2.54 s (-m3) | ||
| 3.14 s (-m5) | 5.87 s (-m5) | ||
| 0.28 s | 0.23 s |
11.5 تكلفة التشفير
11.6 إعادة إنتاج النتائج
# media: which filter wins, per file
nikpak mt song.wav tracker.mod photo.bmp
# archive with nikpak and RAR, then compare
nikpak a -q -ep -m2 test.nik *.wav
rar a -ep -m5 -ma5 test.rar *.wav
# fair comparison on many files: give RAR solid mode
rar a -r -s -m5 -ma5 -md256m data.rar data
nikpak a -m5 data.nik data
# verify
nikpak x -o+ test.nik restore\
11.7 الجولة الثانية: nikpak وRAR 7 و7-Zip وZIP
الطريقة
مادة الاختبار
| 8 | 6,987,840 | ||
| 16 | 2,252,604 | ||
| 35 | 2,991,820 | ||
| 4 × 1 | 53,417,226 | ||
| 18 | 11,793,318 | ||
| 60 | 39,100,915 | ||
| 11,473 | 190,454,632 |
المستويات القصوى: حجم الأرشيف
| 6,987,840 | 3,557,350 | 4,394,310 | 4,195,043 | 4,974,680 | |
| 2,252,604 | 1,127,607 | 1,264,245 | 1,166,855 | 1,408,085 | |
| 2,991,820 | 1,346,484 | 1,596,971 | 1,484,879 | 1,852,279 | |
| 17,760,408 | 8,731,989 | 10,460,042 | 10,666,922 | 15,225,764 | |
| 4,440,136 | 2,458,867 | 2,797,026 | 2,784,080 | 3,736,722 | |
| 2,220,090 | 606,840 | 725,416 | 642,341 | 836,989 | |
| 28,996,592 | 18,198,056 | 21,229,465 | 25,542,036 | 26,980,770 | |
| 11,793,318 | 2,741,898 | 3,519,622 | 3,259,868 | 4,223,579 | |
| 39,100,915 | 6,887,729 | 11,186,217 | 10,085,779 | 17,399,998 | |
| 190,454,632 | 28,175,618 | 33,606,893 | 28,879,398 | 62,198,510 |

المستويات السريعة: الحجم ووقت الإنشاء
| 54.0 % · 0.39 s | 63.0 % · 2.09 s | 60.1 % · 3.51 s | 71.2 % · 0.35 s | |
| 52.4 % · 0.61 s | 56.2 % · 0.43 s | 51.9 % · 0.69 s | 62.7 % · 0.10 s | |
| 51.1 % · 0.41 s | 53.6 % · 0.71 s | 49.6 % · 1.96 s | 61.9 % · 0.24 s | |
| 49.2 % · 1.72 s | 59.9 % · 3.60 s | 60.1 % · 14.03 s | 85.7 % · 0.82 s | |
| 55.4 % · 0.58 s | 64.1 % · 0.95 s | 62.7 % · 2.14 s | 84.2 % · 0.22 s | |
| 27.4 % · 0.77 s | 33.3 % · 0.52 s | 28.9 % · 2.13 s | 38.2 % · 0.32 s | |
| 62.8 % · 2.06 s | 73.6 % · 7.54 s | 88.1 % · 13.54 s | 93.0 % · 1.19 s | |
| 35.2 % · 0.11 s | 30.4 % · 5.53 s | 27.7 % · 11.76 s | 36.0 % · 0.89 s | |
| 38.0 % · 0.22 s | 29.5 % · 8.25 s | 26.2 % · 21.85 s | 44.7 % · 1.83 s | |
| 25.3 % · 1.67 s | 18.0 % · 48.19 s | 17.0 % · 93.71 s | 32.9 % · 7.32 s |
البيانات العامة بالتفصيل
| 28,175,618 | 14.8 % | 154.3 s | 5.6 s | |
| 28,879,398 | 15.2 % | 120.9 s | 6.0 s | |
| 32,350,575 | 17.0 % | 73.6 s | 7.0 s | |
| 32,375,802 | 17.0 % | 93.7 s | 4.5 s | |
| 33,295,133 | 17.5 % | 37.8 s | 3.3 s | |
| 33,606,893 | 17.6 % | 72.4 s | 6.7 s | |
| 34,236,198 | 18.0 % | 48.2 s | 5.9 s | |
| 48,229,284 | 25.3 % | 1.7 s | 0.9 s | |
| 56,038,351 | 29.4 % | 20.2 s | 6.9 s | |
| 62,198,510 | 32.7 % | 28.2 s | 6.9 s | |
| 62,672,415 | 32.9 % | 7.3 s | 5.4 s |

من 1.1.0 إلى 1.2.0
| 3,306,819 | 2,741,898 | 3,259,868 | ||
| 10,417,750 | 6,887,729 | 10,085,779 | ||
| 31,322,041 | 28,175,618 | 28,879,398 |
قراءة النتائج بصدق
nikpak -m5 هو الأصغر في كل مجموعة. مقابل 7-Zip -mx9 يكون أصغر بنسبة 2.4 إلى 31.7 %، ومقابل RAR 7 -m5 بنسبة 10.8 إلى 38.4 %، ومقابل ZIP -9 بنسبة 19.9 إلى 60.4 %. في الصوت المسجَّل يتنبأ NAC بما لا تستطيع الضواغط القائمة على LZ إلا مطابقته: في موسيقى 24 بتاً يوفر 7-Zip نسبة 12 % وnikpak نسبة 37 %. ملفات Office: أصغر بنسبة 31.7 % من 7-Zip. تحوِّل إعادة ضغط Deflate مساحة 6.6 MB من .xlsx و1.9 MB من .docx إلى XML صريح يضغطه LZMA2 أفضل بكثير مما فعل Deflate (6.89 MB مقابل 10.09 MB). حتى -m4 أصغر بنسبة 1.3 % من 7-Zip -mx9 وأسرع (16 ثانية مقابل 26 ثانية). والثمن عند -m5 هو الوقت: 81 ثانية مقابل 26 ثانية. النصوص: أصغر بنسبة 15.9 %، في نصف الوقت. يفوز PPMd في النثر (6.4 ثانية مقابل 12.9 ثانية للإنشاء). ولأن PPMd يفك الترميز ببطء يساوي بطء ترميزه، يستغرق الاستخراج 2.7 ثانية بدلاً من 0.2 ثانية. الكود المصدري: أصغر بنسبة 2.4 %، تقدم ضئيل. 28.2 MB مقابل 28.9 MB، في 154 ثانية مقابل 121 ثانية. صنع الفرقُ الترتيبَ حسب نوع الملف واختيار المحرك على عينات متجاورة (6.7). المستوى السريع -m2: الأسرع، لا الأصغر. يحتاج nikpak -m2 إلى 1.7 ثانية للمجموعة العامة، مقابل 93.7 ثانية لـ7-Zip -mx5 (أطول 56 مرة)، و48.2 ثانية لـRAR، و7.3 ثانية لـZIP. وهو أصغر من 7-Zip -mx5 في الصور وفي معظم الصوت (ملفات MOD وملفات WAV الخاصة بالمعرض أكبر بنسبة 1 إلى 3 %)، لكنه أكبر في النصوص وملفات Office والكود المصدري (49.0 % على المجموعة العامة). ولهذا السبب، يستخدم nikpak منذ الإصدار 1.2.1 الخيار -m5 افتراضياً؛ ويجب طلب -m2. ZIP سريع لكنه الأكبر في كل مكان. حتى nikpak -m2 يتفوق على ZIP -9 في كل مجموعة. ينشئ ZIP أرشيفات وسائط صغيرة أسرع من nikpak -m2، لأن Deflate يبذل عملاً أقل بكثير من مرمّز NAC، لكنه أبطأ في النصوص وملفات Office والكود المصدري. الاستخراج. تُستخرج المجموعة العامة في 0.9 ثانية (nikpak -m2) أو 5.6 ثانية (-m5)، مقابل 6.0 ثانية لـ7-Zip، و6.7 ثانية لـRAR، و6.9 ثانية لـZIP. وتُستخرج الأرشيفات ذات تدفقات Deflate المعاد ضغطها أبطأ، لأن كل تدفق يُعاد بناؤه (2.1 ثانية مقابل 0.7 ثانية لمجموعة Office). RAR على هذا الجهاز. كان RAR أبطأ هنا مما في 11.3 (72 ثانية بدلاً من 27 ثانية لـ-m5 -s على كمية مماثلة من الكود المصدري). يختلف الجهاز والبيانات، لذا لا ينبغي خلط القسمين. وضمن هذه الجولة توافرت الشروط نفسها لكل أداة.
ماذا يعني هذا بالنسبة لـnikpak
12 مقارنة nikpak وRAR
12.1 أين يتفوق nikpak
-hp | ||
12.2 أين يتقدم RAR
| 45.6 s | ||
| 0.28 s | ||
12.3 مقاومة الحوسبة الكمومية في منظورها
12.4 أيهما تختار
اختر nikpak لأرشفة الصوت والصور وموسيقى tracker والكود المصدري حيث يكون الحجم والسرعة مهمين، وللنسخ الاحتياطية المبرمجة، وللتشفير الافتراضي القوي، وعندما تكون الصيغة المفتوحة والموثَّقة ذات قيمة. اختر RAR عندما تحتاج سجلات الاسترداد أو الأرشيفات متعددة الأحجام أو ذاتية الاستخراج أو التحديث في المكان، أو عندما يتعين عليك تبادل الأرشيفات مع أشخاص لا يملكون سوى أدوات RAR. استخدم الاثنين: لا شيء يمنع سير عمل من استخدام nikpak للوسائط الكبيرة والنسخ الاحتياطية المشفرة مع إبقاء RAR للتوزيع.
12.5 وماذا عن 7-Zip وZIP؟
اختر nikpak -m5 لأصغر أرشيف. إنه أصغر بنسبة 2.4 إلى 31.7 % من 7-Zip -mx9 في كل مجموعة قيست: 31.7 % في ملفات Office، و15.9 % في النصوص، و2.4 % في الكود المصدري. واختر nikpak -m2 للنسخ الاحتياطية السريعة (أسرع 56 مرة من افتراضي 7-Zip في الكود المصدري). يتمتع nikpak أيضاً بتشفير أقوى: يستخدم 7-Zip معيار AES-256 مع اشتقاق مفتاح SHA-256 غير مستهلك للذاكرة، ولا يخفي أسماء الملفات إلا بـ-mhe. اختر 7-Zip عندما يكون الوقت أهم عند المستوى الأقصى (فهو أسرع في مجموعات Office والكود المصدري الكبيرة)، أو عندما تحتاج مستواه الافتراضي ليكون صغيراً في المستندات، أو عندما تحتاج فتح الصيغ الكثيرة التي يقرؤها 7-Zip. اختر ZIP للتوافق فقط. يفتحه كل نظام تشغيل دون برامج إضافية، لكن nikpak -m5 أصغر بنسبة 19.9 إلى 60.4 %، وتشفير ZIP التقليدي ضعيف.
13 البناء والنشر والتكامل
13.1 نظام Windows مع PowerShell
winget install Rustlang.Rustup
$o = '--wait --passive --add Microsoft.VisualStudio.Workload.VCTools'
$o += ' --includeRecommended'
winget install Microsoft.VisualStudio.2022.BuildTools --override $o
winget متاحاً، ثبِّت Rust من rustup.rs وأدوات Build Tools for Visual Studio مع عبء العمل Desktop development with C++. ثم، في المجلد الذي يحتوي المصادر:.\build.ps1 # builds dist\nikpak.exe and dist\unNik.exe
.\build.ps1 -Test # runs the unit tests first
# if PowerShell refuses to run scripts:
powershell -ExecutionPolicy Bypass -File .\build.ps1
build.ps1 من تثبيت Cargo (ويشرح كيفية تثبيته إن لم يكن)، ويشغِّل البناء، ويشرح السبب المعتاد عند الفشل، وينسخ الملف التنفيذي إلى dist\nikpak.exe.مثبِّت Windows
.\build.ps1 -Installer (أو npm run installer) أيضاً برنامج الإعداد dist\nikpak--setup.exe باستخدام Inno Setup 6.3 أو أحدث (ثبِّته مرة واحدة بـwinget install JRSoftware.InnoSetup). والسكربت هو installer\nikpak.iss؛ ويؤخذ الإصدار من Cargo.toml. ملف الإعداد هذا هو ما يُرفع إلى مواقع shareware والتنزيل.افتراضياً يثبِّت للمستخدم الحالي فقط، دون صلاحيات مسؤول أو مطالبة UAC، في %LOCALAPPDATA%\Programs\NikPak. وتعرض صفحته الأولى خيار "install for all users" (مجلد Program Files، ويتطلب صلاحيات مسؤول). يعرض LICENSE.txt للموافقة ويثبِّت nikpak.exe وunNik.exe والأيقونات وLICENSE.txt وTHIRD-PARTY-NOTICES.txt وCHANGELOG.md. ويضيف عنصراً في قائمة Start، وأيقونة سطح مكتب اختيارية، وعند الطلب يضيف المجلد إلى PATH لسطر الأوامر. ويسجِّل أداة إزالة تثبيت في Settings > Apps. الاختصارات: NikPak وunNik والترخيص في قائمة Start؛ وNikPak على سطح المكتب (دائماً) وunNik على سطح المكتب كخيار. تُسجَّل ملفات .nik دائماً (منذ الإصدار 1.5.2): تحصل على أيقونتها الخاصة (nikfile.ico، صفحة بسحّاب، مثل ملفات .zip)، واسم النوع "NikPak archive"، ويفتحها النقر المزدوج في unNik ("Open with unNik" في قائمة النقر الأيمن). ويُدرج unNik أيضاً في "Open with" وفي التطبيقات الافتراضية (Default apps). وتزيل أداة إزالة التثبيت التسجيل. إذا كانت ملفات .nik مضبوطة مسبقاً للفتح ببرنامج آخر، يُبقي Windows ذلك الاختيار حتى يُختار unNik مرة في "Open with". يشغِّل "Launch NikPak" الأخير برنامج NikPak كمستخدم عادي، وليس كمسؤول أبداً، حتى يعمل السحب والإفلات. تُثبَّت التحديثات فوق الإصدار السابق (AppId ثابت). ويُحتفظ بالترخيص في %APPDATA%\nikpak عند التحديث والإزالة. ولا يحتوي برنامج الإعداد على مفاتيح أو ملفات مفاتيح أبداً. يعمل المثبِّت بالإنجليزية أو الفرنسية، تبعاً لـWindows. وقبل النشر، وقِّع nikpak.exe وبرنامج الإعداد بشهادة توقيع أكواد، حتى لا يحذر Windows SmartScreen من ناشر غير معروف.
nikpak.exe وunNik.exe وبرنامجي الإعداد وSHA256SUMS.txt — وينسخها إلى binaries\، ويعيد بناء موقع الويب ويرفعه عبر FTP (ويتخطى -NoUpload الرفع). ويثبِّت برنامج الإعداد الثاني، unnik--setup.exe (installer\unnik.iss)، برنامج unNik وحده، متصفح الأرشيف المجاني؛ وعندما يكون NikPak مثبتاً بالفعل يثبِّت البرنامج فقط، فلا تتكرر القوائم أبداً.13.2 البناء باستخدام npm
package.json صغير تستدعي سكربتاته Cargo ببساطة، بحيث يستطيع المطور الذي يعيش في سير عمل Node.js كتابة أوامر مألوفة:npm run build # cargo build --release
npm run dist # build.ps1 -> dist\nikpak.exe
npm test # cargo test --release
npm run clean # cargo clean
13.3 ملف تنفيذي قائم بذاته
.cargo/config.toml بيئة تشغيل C استاتيكياً لأهداف Windows MSVC. لذا لا يحتوي nikpak.exe الناتج (عدة MB مع الواجهة الرسومية، ونحو 2.3 MB بدونها) على اعتماديات DLL ولا يحتاج Visual C++ Redistributable على الأجهزة التي يعمل عليها. انسخه إلى مجلد على PATH لاستخدامه في أي مكان. يفعِّل ملف تعريف release التحسين الكامل، وتحسين وقت الربط، ووحدة توليد كود واحدة، وتجريد الرموز، وpanic = abort للحصول على ملف ثنائي صغير وسريع.13.4 نظاما macOS وLinux
./build.sh # builds and copies the result to dist/nikpak
# or: cargo build --release
sudo cp dist/nikpak /usr/local/bin/
xcode-select --install)؛ وعلى Debian أو Ubuntu ثبِّت مترجم C (sudo apt install build-essential). وتأتي Rust نفسها من curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh. تُترجم مكتبة الضغط من مصادرها بلغة C بواسطة Cargo، لذا لا حاجة إلى مكتبة نظام../package-unix.sh، الذي يبني nikpak وunNik ويحزمهما مع install.sh في binaries\nikpak--macos.zip (ملف ثنائي عالمي: Intel + معالجات Apple silicon) أو binaries\nikpak--linux-.tar.gz. عيّن ZIG=1 على Linux للبناء بـcargo-zigbuild مقابل glibc 2.28، حتى تعمل البرامج أيضاً على التوزيعات الأقدم.13.5 الاعتماديات
Cargo.lock، وهو جزء من حزمة المصدر، لذا يستخدم كل بناء الكود نفسه.zstd | |
chacha20poly1305 | |
argon2 | |
rand | |
zeroize | |
rpassword | |
crc32fast | |
glob | |
liblzma | |
ppmd-rust | |
preflate-rs | |
eframe / egui | |
rfd | |
ed25519-dalek | |
rustybuzz, unicode-bidi |
13.6 البرمجة النصية
$archive = "D:\Backups\docs-$(Get-Date -Format yyyy-MM-dd).nik"
# the password comes from a file or secret store, not from the script
$env:NIKPAK_PASSWORD = Get-Content "$env:USERPROFILE\.nikpak-secret"
nikpak a -p -m3 -inul $archive "$env:USERPROFILE\Documents"
if ($LASTEXITCODE -gt 1) { throw "nikpak failed: $LASTEXITCODE" }
nikpak t -inul $archive # verify what was written
if ($LASTEXITCODE -ne 0) { throw "archive verification failed" }
export NIKPAK_PASSWORD="$(cat ~/.nikpak-secret)"
nikpak a -p -m3 -inul "backup-$(date +%F).nik" ~/Documents || [ $? -eq 1 ]
nikpak lb backup-2026-10-16.nik | grep -i '\.wav$'
13.7 Total Commander
nik؛ واستخدم a للضغط وx لفك الضغط؛ ودع الواجهة الأمامية تمرر @listfile لقوائم الملفات الطويلة؛ وأعطِ -o+ أو -y للاستخراج دون تدخل؛ ومرِّر كلمة المرور بـ-p أو متغير NIKPAK_PASSWORD، لأن الواجهة الرسومية الأمامية لا تملك طرفية للمطالبة.14 الاختبار والتحقق
14.1 اختبارات الوحدة
cargo test --release:
14.2 الاختبارات الشاملة
استُخرج كل أرشيف معياري وقورن بمصدره بايتاً ببايت (SHA-256 لمجموعة 10,949 ملفاً)، على عدة مستويات. أُنشئ أرشيف مختلط (WAV وMOD وBMP ونص وبيانات عشوائية ومجلدات فرعية)، وعُرض واختُبر واستُخرج كاملاً، واستُخرج ملف واحد من منتصفه. أُنشئ الأرشيف نفسه مع التشفير، واختُبر بكلمة المرور الصحيحة والخاطئة، واستُخرج. فتح الإصدار 1.1 الأرشيفات التي كتبها إصدار الصيغة السابق (1.0). اختُبر إدخال كلمة المرور التفاعلي عبر طرفية زائفة: كلمات مرور متطابقة، وعدم تطابق، وإدخال فارغ (توليد)، وكلمات مرور صحيحة وخاطئة عند الفتح.
14.3 اختبارات الهجوم
14.4 عيوب وجدها الاختبار
15 القيود وخارطة الطريق
15.1 القيود الحالية
-o+. | |
-m4 و-m5 نافذة 128 MiB؛ ويتطلب فك ضغطها ذلك القدر من الذاكرة. | |
Single-threaded and the slowest level. Creating needs up to about 1.1 GB of memory, extracting up to about 350 MB. | |
cargo test --release هناك قبل الاعتماد على أي بناء. |
15.2 خارطة الطريق
Cargo.lock في المستودع حتى تكون البناءات قابلة لإعادة الإنتاج، وشغِّل cargo test --release في مهمة التكامل المستمر لكل منصة تدعمها.أ الملحق أ: ثوابت الصيغة وحدودها
89 4E 49 4B 0D 0A 1A 0A | |
u32 بترتيب big endian في المقدمة | |
-mt) |
ب الملحق ب: المسرد