NikPak

প্রযুক্তিগত গাইড

সম্পূর্ণ প্রযুক্তিগত গাইড: আর্কিটেকচার ও .nik ফরম্যাট, কম্প্রেশন ইঞ্জিন ও মিডিয়া কোডেক, এনক্রিপশন ডিজাইন ও কোয়ান্টাম প্রতিরোধ, হার্ডেনিং, সব বেঞ্চমার্ক, এবং বিল্ড, পরীক্ষা ও রোডম্যাপ নোট।

1 ভূমিকা

nikpak হল .nik ফরম্যাটের জন্য একটি কমান্ড-লাইন আর্কাইভার। এটি চারটি লক্ষ্যকে ঘিরে নকশা করা হয়েছে: প্রতিষ্ঠিত টুলগুলোর চেয়ে ভালো কমপ্রেস করা, আরও দ্রুত করা, আধুনিক ক্রিপ্টোগ্রাফি দিয়ে ডেটা সুরক্ষিত করা এবং Windows, macOS ও Linux-এ একটি একক ছোট এক্সিকিউটেবল হিসেবে অপরিবর্তিতভাবে চালানো।

1.1 নকশার লক্ষ্য

  • ছোট। মানুষ যে ডেটা আসলে বাল্কে আর্কাইভ করে, তাতে RAR 7-কে হারানো। অডিও, ছবি ও ট্র্যাকার মিউজিক কনটেন্ট দিয়ে শনাক্ত করা হয় এবং বিশেষায়িত লসলেস কোডেক দিয়ে কমপ্রেস করা হয়; বাকি সবকিছু একটি টিউন করা, মাল্টি-থ্রেডেড Zstandard স্ট্রিম ব্যবহার করে।
  • দ্রুত। কম্প্রেশন ও এক্সট্র্যাকশন CPU নয়, ডিস্ক দ্বারা সীমাবদ্ধ হওয়া উচিত। এর দ্রুত স্তর -m2-তে nikpak একটি কোর-এ প্রায় 200 MB সোর্স ফাইল এক সেকেন্ডেরও কম সময়ে আর্কাইভ করে।
  • নিরাপদ। মেমরি-হার্ড কী ডেরিভেশন ফাংশনসহ অথেন্টিকেটেড এনক্রিপশন, ফাইলের নাম সবসময় গোপন, বিকৃতি সবসময় শনাক্ত, এবং এমন একটি এক্সট্র্যাক্টর যাকে তার গন্তব্য ফোল্ডারের বাইরে লেখার জন্য প্রতারিত করা যায় না।
  • কোয়ান্টাম-প্রতিরোধী। শুধুমাত্র 256-বিট সিমেট্রিক ক্রিপ্টোগ্রাফি ব্যবহৃত হয়। nikpak-এর কোথাও কোনো RSA, কোনো ইলিপ্টিক-কার্ভ এবং কোনো Diffie-Hellman কোড নেই, তাই Shor-এর অ্যালগরিদমের ভাঙার মতো কিছুই নেই।
  • পোর্টেবল এবং স্ক্রিপ্টযোগ্য। একটি স্ট্যাটিকভাবে লিংক করা এক্সিকিউটেবল, RAR-সামঞ্জস্যপূর্ণ কমান্ড লাইন, অনুমানযোগ্য এক্সিট কোড এবং একটি -help যা প্রতিটি অপশন নথিভুক্ত করে।

1.2 এক নজরে ফলাফল

পরিমাপফলাফলতুলনা করা হয়েছে
BMP ফটোগ্রাফ38.8 % ছোটRAR 7.00 -m5
স্টেরিও মিউজিক, 44.1 kHz 16-বিট14.6 % ছোট (FLAC -8-এর সমতুল্য)RAR 7.00 -m5
ProTracker MOD ফাইল13.3 % ছোটRAR 7.00 -m5
মনো অডিও, 8-বিট ও 16-বিট12.2 % এবং 15.3 % ছোটRAR 7.00 -m5
197 MB সোর্স ফাইল, সর্বোচ্চ স্তর5.5 % ছোট (24.4 MB বনাম 25.9 MB)RAR 7.00 -m5 -s -md256m
একই ডেটা, দ্রুত স্তর -m2 0.9 sRAR 7.00 -m3 সলিড: 16.7 s
এনক্রিপশনArgon2id + XChaCha20-Poly1305RAR5: AES-256-CBC + PBKDF2
সব 10টি টেস্ট সেট, সর্বোচ্চ স্তর, বনাম 7-Zip2.4 থেকে 31.7 % ছোট7-Zip 23.01 -mx9 (অনুচ্ছেদ 11.7)
অফিস ফাইল (doc, docx, xls, xlsx, csv, pdf)31.7 % ছোট7-Zip 23.01 -mx9 (অনুচ্ছেদ 11.7)
সব 10টি টেস্ট সেট, সর্বোচ্চ স্তর, বনাম ZIP19.9 থেকে 60.4 % ছোটZIP -9, Info-ZIP 3.0 (অনুচ্ছেদ 11.7)
এক্সিকিউটেবলএকটি ফাইল, কোনো নির্ভরতা নেই; উইন্ডোসহ প্রায় 9 MB, শুধু কমান্ড-লাইন 2.3 MBWindows, macOS, Linux



কীভাবে এই সংখ্যাগুলো পাওয়া গেছে
সব পরিমাপ এসেছে একটি মেশিন (Linux x86-64 ভার্চুয়াল মেশিন, একটি CPU কোর) থেকে, RAR 7.00 এবং nikpak 1.1.0 সহ। প্রতিটি আর্কাইভ আবার এক্সট্র্যাক্ট করে মূলের সাথে বাইট-বাই-বাইট তুলনা করা হয়েছে। সম্পূর্ণ পদ্ধতি, কর্পোরা এবং যে ক্ষেত্রে RAR দ্রুত, তা 11 অধ্যায়ে বর্ণিত হয়েছে।



1.3 এটি কার জন্য?

nikpak তাদের জন্য যারা বিপুল পরিমাণ মিডিয়া বা সোর্স কোড আর্কাইভ করে এবং আকার ও গতিকে গুরুত্ব দেয়; সেই ডেভেলপারদের জন্য যারা যুক্তিসঙ্গত এক্সিট কোড ও নথিভুক্ত ফরম্যাটসহ একটি স্ক্রিপ্টযোগ্য আর্কাইভার চান; এবং এমন যেকোনো ব্যক্তির জন্য যার একটি বদ্ধ ইমপ্লিমেন্টেশনের উপর আস্থা না রেখে শক্তিশালী এনক্রিপশন দরকার। যেহেতু কমান্ড লাইন RAR-এর রীতি অনুসরণ করে, Total Commander-এর মতো ফ্রন্ট-এন্ড খুব সামান্য বা কোনো পুনঃকনফিগারেশন ছাড়াই এটি চালাতে পারে।

1.4 এই গাইড কীভাবে পড়বেন

2 ও 3 অধ্যায় বর্ণনা করে nikpak কী করে এবং কীভাবে এটি ব্যবহার করতে হয়। 4 থেকে 7 অধ্যায় ব্যাখ্যা করে আর্কিটেকচার, ফাইল ফরম্যাট, কম্প্রেশন ইঞ্জিন এবং মিডিয়া কোডেক। 8 থেকে 10 অধ্যায় এনক্রিপশন, কোয়ান্টাম প্রতিরোধ এবং হার্ডেনিং নিয়ে। 11 অধ্যায়ে বেঞ্চমার্ক উপস্থাপিত হয়েছে, 12 অধ্যায়ে nikpak-এর সাথে RAR-এর সৎ তুলনা, আর 13 থেকে 15 অধ্যায়ে বিল্ডিং, টেস্টিং এবং রোডম্যাপ নিয়ে আলোচনা।

1.5 কমিউনিটি ও যোগাযোগ

খবর, প্রশ্ন, ধারণা ও বাগ রিপোর্ট: nikpak-এর লেখকের সাথে যোগাযোগ করা যায়

  • Telegramhttps://t.me/cryptonikko
  • Xhttps://x.com/cryptonikkoid
  • Discordhttps://discord.com/users/1537826350759415811

একই তিনটি লিংক গোলাকার, রঙিন বাটন হিসেবে nikpak উইন্ডোর নিচে, গন্তব্য ফোল্ডারের নিচে (অনুচ্ছেদ 3.7), এবং nikpak -help-এর শেষে দেখানো হয়।

2 বৈশিষ্ট্যের সংক্ষিপ্ত বিবরণ

2.1 ক্ষমতা

ক্ষেত্রnikpak যা প্রদান করে
কম্প্রেশনZstandard (মাল্টি-থ্রেডেড, সলিড) -m1 থেকে -m4-এ, -m4-এ একটি 128 MiB উইন্ডো ও লং-ডিস্ট্যান্স ম্যাচিংসহ। -m5-এ একটি মাল্টি-ইঞ্জিন বডি: বাইনারি ডেটার জন্য LZMA2 এবং টেক্সটের জন্য PPMd, ট্রায়ালের মাধ্যমে নির্বাচিত; 7-Zip-এর মতো ফাইল টাইপ অনুযায়ী সাজানো।
মিডিয়া বুদ্ধিমত্তাWAV, AIFF, ProTracker MOD ও BMP-এর কনটেন্ট-ভিত্তিক শনাক্তকরণ; প্রতি ফাইলে চারটি ফিল্টারের (NAC, Shuffle, Shuffle+Delta, MED) মধ্যে ট্রায়াল; প্লেইন কম্প্রেশনে স্বয়ংক্রিয় ফলব্যাক।
অফিস, PDF, gzipDeflate রিকম্প্রেশন (preflate): docx, xlsx, pptx, odt, ods, epub, jar, zip, pdf ও gz ফাইলের ভেতরের Deflate স্ট্রিমগুলো ডিকোড করা হয়, অনেক ভালোভাবে কমপ্রেস করা হয় এবং এক্সট্র্যাকশনে বিট-ফর-বিট পুনর্নির্মিত হয় (-m4, -m5)।
এনক্রিপশনArgon2id (64 MiB) কী ডেরিভেশন, 64 KiB অথেন্টিকেটেড চাংকে XChaCha20-Poly1305; নাম, আকার, তারিখ ও অনুমতি এনক্রিপ্ট করা হয়।
পাসওয়ার্ডনিশ্চিতকরণসহ ইন্টারঅ্যাক্টিভ প্রম্পট, এনভায়রনমেন্ট ভেরিয়েবল, stdin, কমান্ড লাইন; কিছু সরবরাহ না করা হলে একটি শক্তিশালী র্যান্ডম পাসওয়ার্ড স্বয়ংক্রিয়ভাবে তৈরি।
অখণ্ডতাপ্রতিটি ফাইলের মূল বাইটের CRC32; এনক্রিপ্টেড আর্কাইভের জন্য AEAD অথেন্টিকেশন; এন্ট্রি সংখ্যাসহ এন্ড মার্কার; স্ব-যাচাইকারী অডিও কোডেক।
কমান্ড লাইনRAR-শৈলীর কমান্ড (a x e l v lb t p d), একক ফাইল, ফোল্ডার বা ওয়াইল্ডকার্ড এক্সট্র্যাকশন, এবং সুইচ, zip-শৈলীর অ্যালিয়াস, ওয়াইল্ডকার্ড, @listfiles, বর্জন, ওভাররাইট নীতি, কোয়ায়েট মোড, স্পষ্ট এক্সিট কোড।
নিরাপত্তাZip-slip সুরক্ষা, সিমলিংক প্রত্যাখ্যান, setuid অপসারণ, সীমাবদ্ধ ডিকোডার, অ্যাটমিক আর্কাইভ রাইট, Rust মেমরি নিরাপত্তা।
পোর্টেবিলিটিWindows (PowerShell, cmd), macOS, Linux; একক স্ট্যাটিক এক্সিকিউটেবল; প্রতিটি প্ল্যাটফর্মে বাইট-সঠিক ফলাফল।
গ্রাফিক্যাল ইন্টারফেসআর্গুমেন্ট ছাড়া চালু হলে, nikpak একটি মিনিমালিস্ট ড্রপ উইন্ডো খোলে: ফাইল বা ফোল্ডার ড্রপ (বা বেছে) করে সেরা কম্প্রেশন দিয়ে কমপ্রেস করুন; প্রগ্রেস রিং, মনে রাখা গন্তব্য ফোল্ডার (অনুচ্ছেদ 3.7)।
আর্কাইভ ব্রাউজারunNik.exe, সবার জন্য বিনামূল্যে: .nik আর্কাইভে ফোল্ডার ব্রাউজ, সার্চ, টেক্সট ও বাইনারি ফাইল দেখা, একটি নির্বাচন এক্সট্র্যাক্ট করা এবং ফাইল মুছে ফেলা (অনুচ্ছেদ 3.9)।
স্কিন55টি উইন্ডো স্কিন, যার মধ্যে 14টি আঁকা দৃশ্য স্কিন; উইন্ডোর পাশে একটি স্কিন বক্স যাতে Apply Skin ও Cancel আছে; আপনার নিজের Nikkomander .skin.json ফাইল ইমপোর্ট করুন (অনুচ্ছেদ 3.10)।
ফাইল-ম্যানেজার মেনুExplorer, Dolphin, Nemo, Nautilus ও Finder-এ একটি “NikPak” সাবমেনু: আর্কাইভে যোগ করুন, এখানে এক্সট্র্যাক্ট করুন, নিজস্ব ফোল্ডারে এক্সট্র্যাক্ট করুন, unNik দিয়ে খুলুন; একাধিক আইটেমের নির্বাচনের জন্য একটি আর্কাইভ (অনুচ্ছেদ 3.11)।



2.2 nikpak এবং RAR পাশাপাশি

নিচের টেবিলটি এই প্রকল্পে পরিমাপ করা nikpak 1.1-এর সাথে RAR 7-এর তুলনা করে এবং স্পষ্টভাবে বলে দেয় কোথায় RAR এগিয়ে। 12 অধ্যায়ে পৃথক বিষয়গুলো আলোচনা করা হয়েছে।


nikpak 1.1RAR 7
মিডিয়া কম্প্রেশনপ্রতি ফাইলে ট্রায়ালের মাধ্যমে নির্বাচিত বিশেষায়িত লসলেস কোডেকবিল্ট-ইন ফিল্টারসহ সাধারণ অ্যালগরিদম
সোর্স কোড, সর্বোচ্চ স্তর24.4 MB (ছোট), 45.6 s25.9 MB, 26.7 - 36.2 s
দ্রুত স্তরে গতি0.9 s 197 MB-এর জন্য (-m2) 9.7 - 16.7 s (-m3)
এনক্রিপশনArgon2id + XChaCha20-Poly1305 (অথেন্টিকেটেড)AES-256-CBC + PBKDF2-HMAC-SHA256
ফাইলের নাম সবসময় এনক্রিপ্ট করা হয়হ্যাঁশুধু -hp দিয়ে
মেমরি-হার্ড পাসওয়ার্ড হ্যাশিংহ্যাঁ (64 MiB)না
র্যান্ডম পাসওয়ার্ড জেনারেটরবিল্ট-ইনবিল্ট-ইন নয়
সোর্স কোড, ভাষাসম্পূর্ণ সোর্স, Rust (মেমরি নিরাপদ)মালিকানাধীন, C++
রিকভারি রেকর্ড, ভলিউম, SFX, ইন-প্লেস আপডেটএখনো নয়হ্যাঁ (WinRAR)
ট্র্যাক রেকর্ডনতুন, এখনো অডিট হয়নিদশকের পর দশক



3 কমান্ড-লাইন রেফারেন্স

nikpak সেই সিনট্যাক্স অনুসরণ করে যা RAR ব্যবহারকারীরা চেনেন: nikpak [options] [files...]। অপশন আর্কাইভ নামের আগে বা পরে যেকোনো জায়গায় আসতে পারে; -- অপশন পার্সিং শেষ করে।

3.1 কমান্ড

কমান্ডঅর্থ
aএকটি নতুন আর্কাইভ তৈরি করে। নামের কোনো এক্সটেনশন না থাকলে .nik যুক্ত হয়। ফোল্ডার সবসময় রিকার্সিভভাবে নেওয়া হয়।
xসম্পূর্ণ পাথসহ এক্সট্র্যাক্ট: সবকিছু, বা শুধু আর্কাইভ নামের পরে দেওয়া নাম, ফোল্ডার ও ওয়াইল্ডকার্ড (nikpak x backup.nik Docs/report.pdf একটি ফাইল এক্সট্র্যাক্ট করে)। শেষে একটি পাথ বিভাজক (বা -d dir) গন্তব্য নির্বাচন করে।
eপাথ ছাড়া এক্সট্র্যাক্ট: প্রতিটি ফাইল সরাসরি গন্তব্য ফোল্ডারে যায়।
lকনটেন্ট তালিকাভুক্ত করে (সব, বা শুধু মিলে যাওয়া নাম): অ্যাট্রিবিউট, আকার, তারিখ (UTC), নাম, মোট।
vবিস্তারিত তালিকা: প্রতিটি ফাইলের CRC32 যোগ করে।
lbসাধারণ তালিকা: প্রতি লাইনে একটি নাম, স্ক্রিপ্ট ও GUI ফ্রন্ট-এন্ডের জন্য নকশা করা।
tটেস্ট: সবকিছু ডিকমপ্রেস করে, প্রতিটি CRC32 পরীক্ষা করে এবং এনক্রিপ্টেড আর্কাইভের ক্ষেত্রে অথেন্টিকেশন যাচাই করে।
pস্ট্যান্ডার্ড আউটপুটে ফাইল প্রিন্ট করে: সবগুলো, বা নাম দেওয়া গুলো (nikpak p notes.nik todo.txt | more)।
dএকটি আর্কাইভ থেকে ফাইল বা ফোল্ডার মুছে দেয় (একটি ফোল্ডার তার কনটেন্টসহ যায়)। আর্কাইভটি তাদের ছাড়া আবার লেখা হয়; এনক্রিপ্টেড আর্কাইভ তাদের পাসওয়ার্ড ধরে রাখে। নাম দেওয়া আবশ্যক।
mtমিডিয়া টেস্ট: WAV/AIFF/MOD/BMP ফাইল শনাক্ত করে এবং প্রতিটি মিডিয়া ফিল্টার যে আকার অর্জন করে তা দেখায়। কিছুই লেখে না।
(none)কোনো আর্গুমেন্ট ছাড়া চালু হলে (উদাহরণস্বরূপ nikpak.exe ডাবল-ক্লিক করে), nikpak তার উইন্ডো খোলে (অনুচ্ছেদ 3.7)।



3.2 অপশন

RAR শৈলীzip শৈলীঅর্থ
-p -eএনক্রিপ্ট / ডিক্রিপ্ট, পাসওয়ার্ড চাওয়া হয়। খালি এন্ট্রি একটি র্যান্ডম পাসওয়ার্ড তৈরি করে এবং তা দেখায়।
-p -P কমান্ড লাইনে পাসওয়ার্ড (মেশিনের অন্য ব্যবহারকারীদের কাছে দৃশ্যমান)।
-hp[password]
-p-এর মতোই। nikpak-এ ফাইলের নাম সবসময় এনক্রিপ্ট করা হয়।
-m0 .. -m5 -0 .. -9স্টোর, দ্রুততম, দ্রুত, ভালো, উচ্চ (Deflate রিকম্প্রেশন যোগ করে), সর্বোচ্চ (1.2.1 থেকে ডিফল্ট; LZMA2/PPMd, অনুচ্ছেদ 6.7)। আকারের চেয়ে গতি বেশি গুরুত্বপূর্ণ হলে -m2 ব্যবহার করুন।
-mt
থ্রেড সংখ্যা, 1 থেকে 256 (ডিফল্ট: সব কোর)।
-mc- / -mc+
সব কনটেন্ট ফিল্টার (মিডিয়া কোডেক ও Deflate রিকম্প্রেশন) বন্ধ / মিডিয়া ফিল্টার সবসময় চালু। ডিফল্ট: স্বয়ংক্রিয় প্রতি-ফাইল ট্রায়াল।
-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 ভার্সন প্রিন্ট করে।



যেসব অপশন RAR ফ্রন্ট-এন্ড সাধারণত পাঠায় কিন্তু এখানে কোনো অর্থ নেই (-s, -ma5, -md64m, -ibck, -idp, -rr, -ts*, -w এবং অনুরূপ) সেগুলো গৃহীত ও উপেক্ষা করা হয়, যাতে বিদ্যমান টুল কনফিগারেশন কাজ করতে থাকে। অন্য যেকোনো কিছু একটি স্পষ্ট ত্রুটি বার্তা ও এক্সিট কোড 7 উৎপন্ন করে।

ফাইল-ম্যানেজার মেনু কয়েকটি লং অপশন যোগ করে (অনুচ্ছেদ 3.11): 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, যা পাসওয়ার্ডকে প্রসেস তালিকার বাইরে রাখে।
  • একটি ইন্টারঅ্যাক্টিভ প্রম্পট, নিশ্চিতকরণের জন্য দুবার জিজ্ঞাসা করা হয়। খালি এন্ট্রি একটি র্যান্ডম পাসওয়ার্ড তৈরি করে।
  • টার্মিনাল ছাড়া (উদাহরণস্বরূপ একটি GUI-এর ভেতরে), stdin-এ পাইপ করা পাসওয়ার্ড; কিছু না থাকলে একটি র্যান্ডম পাসওয়ার্ড তৈরি হয়।

একটি তৈরি করা পাসওয়ার্ডে 56টি দ্ব্যর্থহীন প্রতীকের বর্ণমালা থেকে 24টি অক্ষর থাকে (0/O, 1/l/I নেই), এনট্রপি প্রায় 139 বিট। এটি কনসোলে একটি বাক্সে একবার প্রিন্ট করা হয়। কোনো পুনরুদ্ধার নেই: যে আর্কাইভের পাসওয়ার্ড হারিয়ে গেছে তা কেউ খুলতে পারে না।

একটি এনক্রিপ্টেড আর্কাইভ খোলার সময় nikpak একই উৎসগুলো ব্যবহার করে এবং তারপর এক্সিট কোড 11 ও একটি ব্যাখ্যামূলক বার্তাসহ ব্যর্থ হয়; এটি কখনো কিছু তৈরি করে না, কারণ তৈরি করা পাসওয়ার্ড মিলতে পারত না।

3.4 এক্সিট কোড

কোডঅর্থসাধারণ কারণ
0সফল
1সতর্কতাকিছু ফাইল এড়িয়ে যাওয়া হয়েছে (অপাঠযোগ্য, অনিরাপদ পাথ, সিমলিংক)
2মারাত্মক ত্রুটিফাইল তৈরি বা পড়া যায়নি, অভ্যন্তরীণ ত্রুটি
3দূষিত আর্কাইভ বা CRC ত্রুটিক্ষতিগ্রস্ত বা কাটা আর্কাইভ, চেকসাম ব্যর্থ
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 ও অন্যান্য ফ্রন্ট-এন্ডের সাথে সংযুক্তি

যেহেতু nikpak RAR-এর কমান্ড সিনট্যাক্স গ্রহণ করে (a, x, e, l, t, @listfile, -p, -ep1, -o+, -y, -m), তাই একটি প্রোগ্রাম যা একটি বাহ্যিক rar.exe চালাতে পারে, তা nikpak.exe চালাতে পারে। Total Commander-এ, Configuration, Packer, Additional packer programs-এর অধীনে nik এক্সটেনশন রেজিস্টার করুন এবং প্যাকার ও আনপ্যাকার কমান্ড nikpak.exe-তে নির্দেশ করুন। অটেন্ডেড এক্সট্র্যাকশনের জন্য -o+ বা -y ব্যবহার করুন, কারণ কনসোল ছাড়া nikpak ওভাররাইট করতে জিজ্ঞাসা করতে পারে না এবং বরং বিদ্যমান ফাইল এড়িয়ে যাবে। মেনুর নাম Total Commander ভার্সন অনুযায়ী ভিন্ন হয়; সঠিক ফিল্ডগুলোর জন্য এর বিল্ট-ইন সাহায্য দেখুন।

উইন্ডোজে স্পেসযুক্ত ফোল্ডার
একটি উদ্ধৃত পাথ যা একটি ব্যাকস্ল্যাশ দিয়ে শেষ হয়, যেমন "C:\My Folder\", Windows ভুলভাবে পার্স করে (শেষ উদ্ধৃতিটি এস্কেপড বলে ধরা হয়)। স্পেসযুক্ত গন্তব্যের জন্য বরং -d "C:\My Folder" ব্যবহার করুন।



3.7 গ্রাফিক্যাল ইন্টারফেস

nikpak আর্গুমেন্ট ছাড়া চালু হলে, উদাহরণস্বরূপ nikpak.exe ডাবল-ক্লিক করে, ব্যবহারের বিবরণ প্রিন্ট করার বদলে একটি ছোট উইন্ডো খোলে। এটি একটি কাজ করে: আপনি যা এর উপর ড্রপ করেন তা কমপ্রেস করে।

The nikpak window: waiting for files (left) and compressing (right).
nikpak উইন্ডো: ফাইলের জন্য অপেক্ষা করছে (বামে) এবং কমপ্রেস করছে (ডানে)।
  • একটি ফাইল বা একটি ফোল্ডার ড্রপ করুন, বা একসাথে একাধিক, উইন্ডোর উপর; অথবা একটি ডায়ালগে বেছে নিতে বৃত্তটিতে ক্লিক করুন (বা choose files / choose a folder লিংকে); বৃত্তে ক্লিক করলে রিং-এর ভেতরে Choose files ও Choose a folder দুটি বাটন দেখায়। সেগুলো সেরা কম্প্রেশনে (-m5) একটি আর্কাইভে কমপ্রেস হয়, যার নাম ফাইলের (এক্সটেনশন ছাড়া), ফোল্ডারের, বা একাধিক আইটেমের ক্ষেত্রে যে ফোল্ডার থেকে এসেছে তার নামে হয়। একটি বিদ্যমান আর্কাইভ কখনো ওভাররাইট হয় না: report.nik হয় report (2).nik।
  • প্রগ্রেস একটি বৃত্তাকার মিটারের ভেতরে বড় শতাংশ হিসেবে দেখানো হয়, সাথে ধাপ (বিশ্লেষণ, কমপ্রেস, শেষ করা), প্রসেস করা পরিমাণ ও সময়। এর নিচের বাতিল বাটনটি (বা Esc কী) একটি দীর্ঘ কম্প্রেশন সাথে সাথে থামিয়ে দেয় এবং অসমাপ্ত আর্কাইভ সরিয়ে দেয়; উইন্ডোটি পরেরটির জন্য খোলা থাকে। কম্প্রেশনের সময় উইন্ডো বন্ধ করলেও একই ঘটে।
  • সম্পন্ন: রিংটি সবুজ হয়ে যায় এবং আর্কাইভের নাম, মূলের তুলনায় এর আকার ও সময় দেখায়। Show in folder এটি Explorer, Finder বা ফাইল ম্যানেজারে খোলে; Compress more (বা বৃত্তে একটি ক্লিক) পরেরটি শুরু করে।
  • যেখানে সংরক্ষণ হবে: নিচের গন্তব্য ফোল্ডারটি টাইপ করে বা 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)। একটি কম্প্রেশনের পরে, এটি এবং সম্পন্ন স্ক্রিনের 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-এর (বা সিস্টেমের) ভাষা অনুসরণ করে, নাহলে English। কমান্ড লাইন English-এই থাকে।
  • অ্যাডমিনিস্ট্রেটর হিসেবে চালানো: Windows অ্যাডমিনিস্ট্রেটর হিসেবে চলা কোনো প্রোগ্রামের উপর Explorer থেকে ফাইল টেনে আনা অনুমোদন করে না। যখন nikpak.exe অ্যাডমিনিস্ট্রেটর হিসেবে চালু হয় (উদাহরণস্বরূপ একটি অ্যাডমিনিস্ট্রেটর PowerShell থেকে), এটি নিজেকে একবার একজন সাধারণ ব্যবহারকারী হিসেবে Explorer দিয়ে পুনরায় চালু করে যাতে ড্র্যাগ অ্যান্ড ড্রপ কাজ করে। তা সম্ভব না হলে উইন্ডোটি একটি নোটিশ দেখায়; তখন বাটন দিয়ে ফাইল বেছে নিন।
  • স্ট্যাটাস ও About: উপরে বামে EVALUATION COPY · REGISTER (একটি ক্লিক রেজিস্ট্রেশন বক্স খোলে) বা REGISTERED TO এবং লাইসেন্সধারীর নাম দেখানো হয়। উপরে ডানদিকের ছোট i বাটনটি, মিনিমাইজ ও ক্লোজের পাশে, About বক্স খোলে: ভার্সন, © 2026 Nicolas Choukroun, Nikkoid LLC দ্বারা পরিবেশিত, লাইসেন্স স্ট্যাটাস, ওয়েব সাইট ও লাইসেন্স শর্তাবলি (LICENSE.txt)।

উইন্ডোটির মাপ 500 × 560 পয়েন্ট (প্রায় 9:10), তাই পুরো উইন্ডোর একটি স্ক্রিনশট ক্রপ ছাড়াই একটি X (Twitter) ছবির পোস্টে ফিট হয়। এটি ফ্রেমহীন: এর উপরের অংশ ধরে টেনে নিন; উপরে ডানদিকের বাটনগুলো About বক্স খোলে, মিনিমাইজ করে ও বন্ধ করে। যখন nikpak.exe Explorer থেকে চালু হয়, Windows এর জন্য যে কনসোল উইন্ডো খোলে তা স্বয়ংক্রিয়ভাবে বন্ধ হয়; কমান্ড প্রম্পট থেকে চালু হলে প্রম্পটটি অক্ষত থাকে। গ্রাফিক্যাল ডিসপ্লে ছাড়া (উদাহরণস্বরূপ SSH-এর মাধ্যমে), nikpak আগের মতোই ব্যবহারের বিবরণ প্রিন্ট করে। ইন্টারফেসটি egui/eframe ব্যবহার করে এবং Inter, Noto Sans SC, Noto Sans Devanagari, Noto Sans Bengali ও Noto Sans Arabic টাইপফেসের সাবসেট এমবেড করে (SIL Open Font License, দেখুন assets/fonts/OFL.txt)। একটি শুধু-কমান্ড-লাইন এক্সিকিউটেবল তৈরি হয় cargo build --release --no-default-features দিয়ে।

The window in Chinese, Hindi and Arabic, and the language menu.
চীনা ও আরবিতে উইন্ডোটি, হিন্দিতে রিমাইন্ডারটি, এবং ভাষা মেনুটি।

হিন্দি, বাংলা ও আরবিতে শেপিং প্রয়োজন: অক্ষর রূপ বদলায় ও যুক্ত হয়, স্বরচিহ্ন তাদের ব্যঞ্জনবর্ণের চারপাশে সরে যায়, এবং আরবি ডান থেকে বামে চলে। egui প্রতি অক্ষরে একটি করে গ্লিফ আঁকে, যা এই ভাষাগুলো ভুলভাবে প্রিন্ট করত; তাই nikpak এমন টেক্সটগুলো Unicode বাইডাইরেকশনাল অ্যালগরিদম (unicode-bidi) দিয়ে সাজায়, rustybuzz (HarfBuzz-এর একটি Rust পোর্ট) দিয়ে শেপ করে, ab_glyph দিয়ে রাস্টারাইজ করে এবং ফলাফলটি একটি ছবি হিসেবে আঁকে (textshape.rs)। তাদের ভেতরের লাতিন শব্দ ও সংখ্যা Inter ফন্ট ধরে রাখে। দীর্ঘ অনুবাদ তাদের বাটনে ফিট করার জন্য ছোট করা হয়, এবং বক্স তাদের টেক্সটের সাথে বড় হয়। অনুবাদগুলো (i18n.rs) মেশিনের সহায়তায় লেখা হয়েছে; স্থানীয় ভাষাভাষীদের পর্যালোচনা স্বাগত।

3.8 লাইসেন্স ও রেজিস্ট্রেশন (শেয়ারওয়্যার)

NikPak একটি শেয়ারওয়্যার, © 2026 Nicolas Choukroun, Nikkoid LLC দ্বারা পরিবেশিত, এবং WinRAR-এর মতো লাইসেন্সকৃত: একই প্যাকেজটি বিনামূল্যের মূল্যায়ন কপি এবং, একবার লাইসেন্স কী প্রবেশ করালে, রেজিস্টার্ড ভার্সন। মূল্যায়ন কপিতে কিছুই নিষ্ক্রিয় করা হয় না।

কেশর্ত
ব্যক্তিগত ব্যবহারকারীব্যক্তিগত, অ-বাণিজ্যিক ব্যবহারের জন্য বিনামূল্যে, কোনো সময়সীমা ছাড়া। একটি ব্যক্তিগত লাইসেন্স ($19) রিমাইন্ডারটি সরিয়ে দেয়; এটি ধারকের ব্যবহৃত সব কম্পিউটার কভার করে।
কোম্পানি ও সংস্থাপ্রতি সিটে একটি কোম্পানি লাইসেন্স, বিনামূল্যের 40 দিনের মূল্যায়নের পরে; সিট হলো কম্পিউটার বা ব্যবহারকারী, যেটি বেশি। প্রতি সিটের ভলিউম মূল্য, WinRAR-এর আদলে: 1–9 সিট $19, 10–24 $15, 25–49 $12, 50–99 $9, 100–199 $7, 200–499 $6, 500 বা তার বেশি $5।
বিতরণঅপরিবর্তিত প্যাকেজটি (LICENSE.txt ও THIRD-PARTY-NOTICES.txt সহ) যেকোনো শেয়ারওয়্যার বা ডাউনলোড সাইটে রাখা যেতে পারে; কী, কী ফাইল বা ক্র্যাক যোগ করা নিষিদ্ধ। .nik আর্কাইভ রয়্যালটি-মুক্ত।



The reminder of the evaluation copy, the registration box and the file chooser.
মূল্যায়ন কপির রিমাইন্ডার (বামে), রেজিস্ট্রেশন বক্স (মাঝে) ও ফাইল বাছাইকারী (ডানে)।
The main window with the i button, and the About box.
উপরে ডানদিকে ছোট i বাটনসহ মূল উইন্ডো (বামে) এবং About বক্স (ডানে)।
  • রিমাইন্ডারটি দেখা দেয় যখন একটি অনিবন্ধিত কপি তার উইন্ডো খোলে। এতে দুটি বাটন আছে, রেজিস্টার করুন ও বিনামূল্যে পরীক্ষা করুন, যাদের বাম/ডান ক্রম প্রতিটি শুরুতে এলোমেলোভাবে বদলায়। বিনামূল্যে পরীক্ষা করুন (বা Esc) এটি বন্ধ করে; এরপর nikpak কোনো সীমাবদ্ধতা ছাড়াই কাজ করে।
  • রেজিস্ট্রেশন বক্সটি নাম, ই-মেইল ঠিকানা ও লাইসেন্স কী চায়। তিনটিই মিলতে হবে: কীটি নাম ও ই-মেইলের একটি স্বাক্ষর। বড়/ছোট হাতের অক্ষর, অতিরিক্ত স্পেস এবং দেখতে একই রকম অক্ষর O/0 ও I/L/1 কোনো ব্যাপার নয়। লাইসেন্স কিনুন খোলে https://nikpak.nikkoid.com/buy.php।
  • একবার রেজিস্টার হলে nikpak সেই কম্পিউটারে সেই ব্যবহারকারীর জন্য আর কখনো জিজ্ঞাসা করে না। লাইসেন্সটি %APPDATA%\nikpak\license.txt-তে সংরক্ষিত হয় (macOS: ~/Library/Application Support/nikpak; Linux: ~/.config/nikpak)। একটি কোম্পানি বরং nikpak.exe-এর পাশে একটি ফাইল nikpak.key রাখতে পারে, যা সেই PC-র প্রতিটি ব্যবহারকারীকে রেজিস্টার করে।
  • কমান্ড লাইন: nikpak register "Jane Doe" jane@example.com NPK1-… রেজিস্টার করে; nikpak license স্ট্যাটাস দেখায়; nikpak unregister লাইসেন্স সরিয়ে দেয়। nikpak -V ও nikpak -help স্ট্যাটাসও দেখায়। অনিবন্ধিত কপি ত্রুটি আউটপুটে (stderr) একটি এক-লাইনের মূল্যায়ন নোটিশ প্রিন্ট করে, কখনো স্ট্যান্ডার্ড আউটপুটে নয়; -q এটি চাপা দেয়।

কীগুলো কীভাবে কাজ করে

একটি লাইসেন্স কী পড়া হয় NPK1- দিয়ে, এরপর পাঁচটির দলে 108টি অক্ষর (Crockford base32)। এতে লাইসেন্স টাইপ (ব্যক্তিগত বা কোম্পানি), সিট সংখ্যা এবং NIKPAK-LICENSE-1, টাইপ, সিট, নাম ও ই-মেইল ঠিকানার একটি Ed25519 স্বাক্ষর থাকে, প্রতিটি নরমালাইজ করা (স্পেস গুটিয়ে ফেলা, ছোট হাতের অক্ষর)। nikpak-এ শুধু 32-বাইট পাবলিক কী থাকে, src/license_pubkey.rs-এ, তাই প্রোগ্রামটি পড়াশোনা করলে কেউ কী তৈরি করতে পারবে না।

কী তৈরি হয় প্রাইভেট কী দিয়ে, যা কখনো Nikkoid LLC ছেড়ে যায় না: হয় প্রাইভেট টুল nikpak-keygen দিয়ে (cargo run --release --features keygen --bin nikpak-keygen -- make --name "Jane Doe" --email jane@example.com; কোম্পানির জন্য --company --seats 25; newkeys একটি নতুন কী জোড়া তৈরি করে) অথবা ওয়েব সার্ভারে server/-এর PHP কিট দিয়ে (PHP 7.2+, MySQL 5.7), যা প্রতি পেমেন্টে একটি কী ইস্যু করে এবং হুবহু একই কী তৈরি করে। server/README.md সেটআপ ও পেমেন্ট প্রবাহ বর্ণনা করে।

3.9 unNik, বিনামূল্যের আর্কাইভ ব্রাউজার

unNik (unNik.exe) প্যাকেজের দ্বিতীয় প্রোগ্রাম। এটি .nik আর্কাইভ খোলে, ভেতরে কী আছে তা দেখায় এবং আপনি যা বেছে নেন তা এক্সট্র্যাক্ট করে। এটি সবার জন্য বিনামূল্যে, কোম্পানিসহ, কোনো রেজিস্ট্রেশন ও রিমাইন্ডার ছাড়া (LICENSE.txt, অনুচ্ছেদ 2a)। সেটআপ এটি nikpak.exe-এর পাশে ইনস্টল করে, Start মেনুতে যোগ করে এবং .nik ফাইলের প্রোগ্রাম হিসেবে নির্ধারণ করে, তাই একটি আর্কাইভে ডাবল-ক্লিক করলে তা unNik-এ খোলে; unNik archive.nik একটি কমান্ড প্রম্পট থেকেও একই কাজ করে।

unNik waiting for an archive and its built-in viewer
একটি আর্কাইভের জন্য অপেক্ষারত unNik (বামে) এবং এর বিল্ট-ইন ভিউয়ার, একটি সোর্স ফাইলে সার্চ করছে (ডানে)।

খালি উইন্ডোটি হুবহু NikPak-এর মতো দেখায়, রিং-এ একটি উপরের দিকে তীরসহ। এর উপর একটি .nik আর্কাইভ ড্রপ করুন, রিং-এ ক্লিক করুন, বা সাম্প্রতিক আর্কাইভগুলোর একটি বেছে নিন: উইন্ডোটি ব্রাউজারে বড় হয়ে যায় (1120 × 720, এর কিনারা থেকে রিসাইজযোগ্য, এবং এটি ম্যাক্সিমাইজ করা যায়)। এনক্রিপ্টেড আর্কাইভ আগে তাদের পাসওয়ার্ড চায়।

The unNik archive browser
ব্রাউজারটি: ফোল্ডার ট্রি ও কম্প্রেশন সারাংশ (বামে), ফাইলগুলো (মাঝে) ও নির্বাচিত ফাইলের বিবরণ (ডানে)।
  • নেভিগেট করুন ফোল্ডার ট্রি, ব্রেডক্রাম্ব, Back, Forward ও Up (Alt+Left, Alt+Right, Backspace) এবং ডাবল-ক্লিক দিয়ে। সার্চ (Ctrl+F) পুরো আর্কাইভে নাম দিয়ে ফাইল খুঁজে পায়; প্রতিটি ফলাফল তার ফোল্ডার দেখায়।
  • নির্বাচন করুন একটি ক্লিক, Ctrl+ক্লিক, Shift+ক্লিক, চেক বক্স, Ctrl+A বা অ্যারো কী দিয়ে। নাম, আকার, টাইপ বা তারিখ অনুযায়ী সাজাতে একটি কলামের শিরোনামে ক্লিক করুন। একটি রাইট-ক্লিক প্রতিটি কাজসহ একটি মেনু খোলে।
  • সব এক্সট্র্যাক্ট করুন, বা নির্বাচনটি (Ctrl+E): গন্তব্য বেছে নিন (ডিফল্টে আর্কাইভের নামে একটি ফোল্ডার, এর পাশে), ফোল্ডার রাখবেন কি না, এবং একটি ফাইল ইতিমধ্যে থাকলে কী করবেন: প্রতিস্থাপন করুন, দুটোই রাখুন (name (1).ext) বা এড়িয়ে যান। একটি ফোল্ডারের ভেতর থেকে নেওয়া ফাইল সেই ফোল্ডারের পাথ ছাড়াই তৈরি হয়, WinRAR-এর মতো। শেষ নির্বাচিত ফাইলের ঠিক পরেই পড়া থামে।
  • দেখুন (F3, বা একটি টেক্সট ফাইলে ডাবল-ক্লিক): লাইন নম্বরসহ টেক্সট, হাইলাইটিংসহ সার্চ, লাইন র্যাপিং ও কপি; বাইনারি ফাইল হেক্সাডেসিমালে। প্রথম 16 MB দেখানো হয়; Notepad-এ খুলুন পুরো ফাইলটি খোলে। খুলুন একটি ফাইলকে তার নিজস্ব প্রোগ্রাম দিয়ে চালু করে (প্রথমে এটি একটি অস্থায়ী ফোল্ডারে এক্সট্র্যাক্ট হয়)।
  • মুছুন (Del) একটি নিশ্চিতকরণের পরে আর্কাইভ থেকে ফাইল ও ফোল্ডার সরিয়ে দেয়। আর্কাইভটি সলিড, তাই এটি তাদের ছাড়া আবার লেখা হয়, একটি অস্থায়ী ফাইলে যা শুধুমাত্র সবকিছু সফল হলে মূলটিকে প্রতিস্থাপন করে। এনক্রিপ্টেড আর্কাইভ তাদের পাসওয়ার্ড ধরে রাখে; অন্য এন্ট্রিগুলো তাদের মিডিয়া বা Deflate ফিল্টার ও তাদের -m5 ইঞ্জিন ধরে রাখে।
  • টেস্ট পুরো আর্কাইভটি ডিকমপ্রেস করে এবং প্রতিটি ফাইল পরীক্ষা করে। বিবরণ প্যানেলটি আকার, তারিখ, ফোল্ডার, CRC32, ফাইলটি কীভাবে সংরক্ষিত ও এর অ্যাট্রিবিউট দেখায়; আর্কাইভের নিজের জন্য এর আকার, পদ্ধতি ও এনক্রিপশন। ট্রির নিচের সারাংশটি কত জায়গা সাশ্রয় হলো তা দেখায়।
  • NikPak-এর মতোই একই দশটি ভাষা, ভাষা বাটন, About বক্স (i) ও কমিউনিটি বাটন। যেকোনো লিপির ফাইলের নাম ফলব্যাক হিসেবে সিস্টেমের ফন্ট দিয়ে আঁকা হয়।
  • NikPak-এ যান: i বাটনের বামে, নিচের দিকে তীরওয়ালা গোল বাটনটি unNik বন্ধ করে NikPak চালু করে। দুটি প্রোগ্রামই একই ফোল্ডারে পাওয়া যায়। তারা একটি সেটিংস ফাইল ভাগ করে, তাই একটিতে বেছে নেওয়া ভাষা অন্যটি ব্যবহার করে, এবং ইতিমধ্যে খোলা একটি উইন্ডো দুই সেকেন্ডের মধ্যে পরিবর্তনটি অনুসরণ করে।
  • গন্তব্য ফোল্ডার খুলুন: ইজেক্ট বাটনের বামের বাটনটি শেষ এক্সট্র্যাকশনের ফোল্ডারটি Explorer বা Finder-এ খোলে (কোনো এক্সট্র্যাকশনের আগে, আর্কাইভের ফোল্ডার)। unNik NikPak-এর মতোই শব্দ বাজায়, আর্কাইভ খোলা, এক্সট্র্যাক্ট করা, মুছে ফেলা ও টেস্ট করার শব্দসহ; এর স্পিকার বাটন ও NikPak-এর সেটিং একটিই ভাগ করে।
Extracting a selection and deleting a file in unNik
একটি নির্বাচন এক্সট্র্যাক্ট করা হচ্ছে (বামে) এবং একটি ফাইল মুছে ফেলা হচ্ছে (ডানে)।

3.10 স্কিন

NikPak ও unNik একই 55টি উইন্ডো স্কিন ভাগ করে: Nikkomander-এর 41টি স্কিন — Nikkoid Blue (ডিফল্ট) ও Nikkoid Bright থেকে Dracula, Nord, Solarized, Classic Blue, Matrix, Pizza, Christmas ও 8-Bit Game পর্যন্ত — সাথে 14টি আঁকা স্কিন যাদের ব্যাকগ্রাউন্ড প্রোগ্রাম নিজেই আঁকে: Moon, America, Pattaya Neons, Burgers Tokyo, Sushi, Amiga, MSX, Colecovision, ZX Spectrum, Cat Life, Dog Life, Mario Bros, Counter Strike ও Chess।

  • স্কিন বাটন (একটি প্যালেট, উভয় প্রোগ্রামের টাইটেল বারে): স্কিন মেনু খোলে, যেখানে প্রতিটি স্কিন তার নিজস্ব রঙে আঁকা হয়। একটি স্কিনের দিকে ইশারা করলে তা পুরো উইন্ডোতে দেখানো হয়; একটি ক্লিক তা রাখে; Esc বা বাইরে একটি ক্লিক আগের স্কিনে ফিরে যায়।
  • এর পাশের সূর্য / চাঁদ বাটন এক ক্লিকে Nikkoid Blue (গাঢ়) ও Nikkoid Bright-এর মধ্যে বদলায়।
  • স্কিন বক্সটি প্রোগ্রামের বাইরে দাঁড়িয়ে থাকে। বক্সটি খোলা থাকাকালীন উইন্ডোটি বক্সের প্রস্থ পরিমাণ ডানদিকে বড় হয়: প্রোগ্রামটি তার 500 × 560 প্যানেল ধরে রাখে এবং বক্সটি পাশের অতিরিক্ত স্বচ্ছ জায়গায় বসে, তাই চেষ্টা করা স্কিনের পেছনে পুরো ইন্টারফেস দৃশ্যমান থাকে। বক্সটিকে তার টাইটেল বার ধরে প্রোগ্রামের উপর বা উইন্ডোর অন্য যেকোনো জায়গায় টেনে নেওয়া যায়, এবং এতে Apply Skin ও বাতিল বাটন আছে। একটি স্কিনে ক্লিক করলে তা পুরো উইন্ডোতে চেষ্টা হয়; Apply তা রাখে এবং উভয় প্রোগ্রামের জন্য সংরক্ষণ করে; বাতিল (বা 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” সাবমেনু, WinRAR-এর মতো, সেটআপ দ্বারা ইনস্টল হয় (Windows: একটি ডিফল্টে-চেক করা অপশন; Linux: nikpak --install-menu; macOS: Finder Quick Actions)।

  • ফাইল ও ফোল্ডারে: আর্কাইভে যোগ করুন… (নাম ও ফোল্ডার চায়, তারপর NikPak উইন্ডোতে কমপ্রেস করে) এবং এখানে আর্কাইভে যোগ করুন (আর্কাইভটি আইটেমগুলোর পাশে যায়, উইন্ডোতে ড্রপের মতো নামকরণ করা হয়)।
  • .nik আর্কাইভে: unNik দিয়ে খুলুন, ফাইল এক্সট্র্যাক্ট করুন…, এখানে এক্সট্র্যাক্ট করুন এবং নিজস্ব ফোল্ডারে এক্সট্র্যাক্ট করুন।
  • একাধিক আইটেম একটি আর্কাইভে যায়; একাধিক নির্বাচিত আর্কাইভ এক উইন্ডোতে একটির পর একটি এক্সট্র্যাক্ট হয়।
  • কমান্ডগুলো unNik.exe দিয়ে চলে, তাই কোনো কনসোল উইন্ডো ফ্ল্যাশ করে না; লেবেলগুলো NikPak-এর ভাষা অনুসরণ করে। Windows 10 সাবমেনুটি সরাসরি দেখায়, Windows 11 আরও অপশন দেখুন (Shift+F10)-এর অধীনে; Linux যোগ করে KDE Dolphin সার্ভিস মেনু, Nemo অ্যাকশন ও Nautilus স্ক্রিপ্ট, আর macOS যোগ করে Finder Quick Actions।
  • মেনুর ব্যবহৃত নতুন কমান্ড-লাইন অপশন: 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 আর্কিটেকচার

nikpak একটি একক Rust প্রোগ্রাম, প্রায় 9,600 লাইনের (ইউনিট টেস্টসহ) ষোলটি সোর্স ফাইলে, সাথে প্রাইভেট লাইসেন্স টুল nikpak-keygen। এর কেন্দ্রীয় নকশার নিয়ম হলো স্ট্রিমিং: ফাইল 256 KiB টুকরোয় পড়া হয়, রাইটারদের একটি চেইনের মধ্য দিয়ে ঠেলে দেওয়া হয়, এবং কখনো সম্পূর্ণ হিসেবে মেমরিতে রাখা হয় না (একমাত্র ব্যতিক্রম BMP পিক্সেল ডেটা, যা 256 MiB-এ সীমাবদ্ধ, এবং কোডেকগুলোর 64 KiB কাজের বাফার)।

4.1 একটি আর্কাইভ তৈরি করার সময় ডেটা প্রবাহ

Figure 1: the creation pipeline. The two lower boxes are inputs to the stage above them.
চিত্র 1: সৃষ্টি পাইপলাইন। নিচের দুটি বক্স তাদের উপরের ধাপের ইনপুট।

প্রতিটি ধাপ হলো পরেরটির চারপাশে মোড়ানো স্ট্যান্ডার্ড Write ট্রেইটের একটি ইমপ্লিমেন্টেশন, তাই একই কোড পাথ একটি প্লেইন আর্কাইভ, একটি এনক্রিপ্টেড আর্কাইভ এবং মিডিয়া ট্রায়াল পরিবেশন করে।

4.2 সোর্স কোড মানচিত্র

ফাইলদায়িত্ব
main.rsএন্ট্রি পয়েন্ট। আর্গুমেন্ট পার্স করে, কমান্ড প্রেরণ করে, ত্রুটিকে এক্সিট কোডে রূপান্তর করে। একটি বন্ধ পাইপ নিঃশব্দে সামলায় (nikpak lb x | head)।
cli.rsহাতে লেখা RAR/zip-শৈলীর আর্গুমেন্ট পার্সার, অপশন টেবিল ও সম্পূর্ণ -help টেক্সট। Clap-শৈলীর লাইব্রেরিগুলো -pSECRET বা -m5-এর মতো সুইচ সঠিকভাবে প্রকাশ করতে পারে না।
archive.rsতৈরি, তালিকা, টেস্ট, এক্সট্র্যাক্ট (ফিল্টার বা একটি সঠিক নির্বাচন দ্বারা), মুছে ফেলা, প্রিন্ট ও মিডিয়া টেস্ট; এছাড়া unNik-এর ব্যবহৃত ইনডেক্স ও একক-ফাইল পড়া। এন্ট্রি-স্ট্রিম রাইটার ও রিডার, ওভাররাইট নীতি ও অ্যাটমিক টেম্প-ফাইল যুক্তি ধারণ করে।
media.rsWAV, AIFF, MOD ও BMP-এর কনটেন্ট শনাক্তকরণ; Shuffle, Delta ও MED ফিল্টার; ট্রায়াল নির্বাচন; CRC ও চাংক-ফ্রেমিং সহায়ক।
nac.rsNAC লসলেস অডিও কোডেক: স্টেরিও ডিকোরিলেশন, প্রেডিক্টর, রেসিডুয়াল কোডিং।
bits.rsNAC-এর ব্যবহৃত MSB-প্রথম বিট রাইটার ও রিডার।
crypto.rsArgon2id কী ডেরিভেশন এবং XChaCha20-Poly1305 চাংক রাইটার ও রিডার।
format.rsঅন-ডিস্ক ফরম্যাটের ধ্রুবক: ম্যাজিক, ভার্সন, রেকর্ড টাইপ, KDF সীমা।
util.rsপাসওয়ার্ড প্রম্পট ও জেনারেশন, পাথ স্যানিটাইজিং, ওয়াইল্ডকার্ড ম্যাচিং, তারিখ ও আকার ফরম্যাটিং।
error.rsত্রুটি টাইপ, এর এক্সিট কোড, এবং I/O ত্রুটির শ্রেণিবিভাগ (দূষণ বনাম সিস্টেম ব্যর্থতা)।
engine.rs-m5-এর মাল্টি-ইঞ্জিন বডি: ব্লক রাইটার ও রিডার, LZMA2 ও PPMd ইঞ্জিন, ইঞ্জিন ট্রায়াল (অনুচ্ছেদ 5.6, 6.7)।
recomp.rspreflate দিয়ে ZIP কন্টেইনার, PDF ও gzip-এর Deflate রিকম্প্রেশন (অনুচ্ছেদ 7.9)।
gui.rsগ্রাফিক্যাল ইন্টারফেস: ড্রপ উইন্ডো, প্রগ্রেস রিং, গন্তব্য সেটিং, কমিউনিটি লিংক (অনুচ্ছেদ 3.7)।
unnik.rsunNik, আর্কাইভ ব্রাউজার: ট্রি, তালিকা, সার্চ, ভিউয়ার, এক্সট্র্যাক্ট ও মুছে ফেলার বক্স (অনুচ্ছেদ 3.9)।
lib.rs, bin/unnik.rsnikpak ও unNik-এর ভাগ করা লাইব্রেরি, এবং unNik.exe-এর এন্ট্রি পয়েন্ট (একটি উইন্ডো প্রোগ্রাম, কনসোল ছাড়া)।
license.rsশেয়ারওয়্যার লাইসেন্স: কী ফরম্যাট, Ed25519 যাচাই, লাইসেন্স সংরক্ষণ, রেজিস্ট্রেশন (অনুচ্ছেদ 3.8)।
i18n.rsউইন্ডোটির দশটি সবচেয়ে বেশি কথ্য ভাষায় অনুবাদ; ভাষা সেটিং (অনুচ্ছেদ 3.7)।
textshape.rsহিন্দি, বাংলা ও আরবির শেপ করা টেক্সট: bidi ক্রম, শেপিং, রাস্টারাইজিং (অনুচ্ছেদ 3.7)।



4.3 একটি আর্কাইভ তৈরি, ধাপে ধাপে

  • যাচাই করুন আউটপুট অবস্থান। একটি বিদ্যমান আর্কাইভ শুধু -o+ (বা একটি ইন্টারঅ্যাক্টিভ হ্যাঁ) দিয়ে প্রতিস্থাপিত হয়; নাহলে nikpak ব্যাখ্যা করে যে অ্যাপেন্ডিং সমর্থিত নয়।
  • সংগ্রহ করুন ইনপুট: ওয়াইল্ডকার্ড সম্প্রসারিত হয় (PowerShell তা করে না), @listfiles পড়া হয়, বর্জন প্রয়োগ হয়, সিমলিংক ও বিশেষ ফাইল সতর্কতাসহ এড়িয়ে যাওয়া হয়, এবং আর্কাইভটি কখনো নিজের সাথে যোগ হয় না।
  • নির্ধারণ করুন পাসওয়ার্ড যদি এনক্রিপশন চাওয়া হয় (অনুচ্ছেদ 3.3) এবং Argon2id দিয়ে কী ডেরাইভ করুন।
  • লিখুন হেডার, তারপর রাইটার চেইন তৈরি করুন: ফাইল, বাফারড রাইটার, ঐচ্ছিক চাংক এনক্রিপ্টর, Zstandard এনকোডার।
  • লিখুন প্রতিটি এন্ট্রি। মিডিয়া ফাইল শনাক্তকরণ ও ট্রায়ালের মধ্য দিয়ে যায় (7 অধ্যায়); বাকি সবকিছু 256 KiB টুকরোয় কপি হয় যখন একটি CRC32 গণনা হয়।
  • লিখুন এন্ড মার্কার এন্ট্রি সংখ্যাসহ, Zstandard ফ্রেম শেষ করুন, চূড়ান্ত এনক্রিপ্টেড চাংকটি সিল করুন এবং ডিস্কে ফ্লাশ করুন।
  • নাম বদলান name.nik.tmp থেকে name.nik। আগে কিছু ব্যর্থ হলে, একটি গার্ড অবজেক্ট অস্থায়ী ফাইলটি মুছে দেয়, তাই একটি অর্ধ-লেখা আর্কাইভ কখনো একটি ভালোটিকে প্রতিস্থাপন করে না।

4.4 একটি আর্কাইভ এক্সট্র্যাক্ট করা, ধাপে ধাপে

  • পড়ুন ও যাচাই করুন হেডার: ম্যাজিক, ভার্সন, ফ্ল্যাগ, পদ্ধতি এবং, এনক্রিপ্টেড আর্কাইভের ক্ষেত্রে, Argon2id প্যারামিটার, যা কোনো মেমরি বরাদ্দের আগে রেঞ্জ-চেক করা হয়।
  • পান পাসওয়ার্ড এবং কী ডেরাইভ করুন। প্রথম অথেন্টিকেটেড চাংকটি তারপর পাসওয়ার্ডটি প্রমাণ বা অপ্রমাণ করে।
  • হাঁটুন এন্ট্রি স্ট্রিম। প্রতিটি এন্ট্রি নাম যেকোনো ফাইল সিস্টেম অ্যাক্সেসের আগে স্যানিটাইজ করা হয় (অনুচ্ছেদ 10.1)।
  • লিখুন ফাইল create_new দিয়ে, টাইমস্ট্যাম্প ও অনুমতি সেট করুন, এবং পুনর্গঠিত বাইটের CRC32 যাচাই করুন। একটি ফাইল যার CRC ব্যর্থ হয় তা রাখার বদলে মুছে ফেলা হয়।
  • যাচাই করুন আর্কাইভের শেষ: এন্ড মার্কারের পরে স্ট্রিমটি সত্যিই শেষ হতে হবে এবং, এনক্রিপ্টেড হলে, চূড়ান্ত অথেন্টিকেটেড চাংকটি প্রসেস হয়েছে কি না তা দেখতে হবে। এটি কাটা ও যোগ করা ডেটা ধরে।

4.5 মেমরি ও থ্রেডিং

Zstandard কম্প্রেশনের জন্য ওয়ার্কার থ্রেড ব্যবহার করে (ডিফল্টে সব কোর, সীমিত করতে -mt)। ডিকম্প্রেশন, অডিও কোডেক ও এনক্রিপশন কলিং থ্রেডে চলে। Argon2id-এর কী ডেরিভেশনের জন্য 64 MiB লাগে, এবং সর্বোচ্চ দুটি স্তর একটি 128 MiB ম্যাচ উইন্ডো ব্যবহার করে, তাই এমন আর্কাইভ ডিকমপ্রেস করতে ততটুকু মেমরি লাগে।

5 .nik কন্টেইনার ফরম্যাট

একটি .nik ফাইল হলো একটি ছোট স্থির হেডার এবং তারপর একটি বডি। বডিটি একটি সলিড স্ট্রিম: সব এন্ট্রি সংযোজিত, একসাথে কমপ্রেস, এবং ঐচ্ছিকভাবে এনক্রিপ্ট করা হয়। ফরম্যাটের ভার্সন 2 মিডিয়া রেকর্ড যোগ করে; ভার্সন 1 আর্কাইভ পাঠযোগ্য থাকে।

5.1 হেডার

অফসেটআকারক্ষেত্রনোট
0 8ম্যাজিক89 4E 49 4B 0D 0A 1A 0A (PNG ধারণা: টেক্সট-মোড স্থানান্তরের ক্ষতি শনাক্ত করে)
8 1ভার্সন3 (1 ও 2 এখনো পাঠযোগ্য)
9 1ফ্ল্যাগবিট 0 = এনক্রিপ্টেড; অন্যান্য বিট অবশ্যই 0
10 1পদ্ধতি0 = store, 1 = Zstandard, 2 = মাল্টি-ইঞ্জিন ব্লক (5.6)
11 1সংরক্ষিত 0
12 4Argon2id মেমরি (KiB)শুধু এনক্রিপ্টেড আর্কাইভ, লিটল এন্ডিয়ান
16 4Argon2id পাসশুধু এনক্রিপ্টেড
20 4Argon2id লেনশুধু এনক্রিপ্টেড
24 16সল্টপ্রতি আর্কাইভে র্যান্ডম, শুধু এনক্রিপ্টেড
40 19স্ট্রিম নন্স প্রিফিক্সপ্রতি আর্কাইভে র্যান্ডম, শুধু এনক্রিপ্টেড



সম্পূর্ণ হেডারটি (12 বাইট, বা এনক্রিপ্টেড হলে 59 বাইট) পরে প্রতিটি এনক্রিপ্টেড চাংকের অ্যাসোসিয়েটেড ডেটা হিসেবে অথেন্টিকেট করা হয়, তাই শনাক্ত না হয়ে এটি পরিবর্তন করা যায় না।

5.2 এন্ট্রি রেকর্ড

(ডিক্রিপ্টেড, ডিকমপ্রেসড) স্ট্রিমের ভেতরে প্রতিটি এন্ট্রি একটি রেকর্ড। সব পূর্ণসংখ্যা লিটল এন্ডিয়ান।

টাইপবিন্যাস
0 ENDcount:u64। শেষ চিহ্নিত করে এবং এর আগে কতটি এন্ট্রি আছে তা বলে।
1 FILEname_len:u16 name mtime:i64 mode:u32 size:u64 data[size] crc32:u32
2 DIRname_len:u16 name mtime:i64 mode:u32
3 MEDIAname_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] চাংকের একটি ধারা যা একটি শূন্য দৈর্ঘ্য দিয়ে শেষ হয়, তাই একটি রিডার তার ফিল্টার না বুঝেই সবসময় একটি মিডিয়া এন্ট্রি এড়িয়ে যেতে পারে।

মিডিয়া প্যারামিটার

ফিল্টারপ্যারামিটারকনটেন্ট
1 অডিও19 বাইটoffset:u64 frames:u64 channels:u8 bits:u8 flags:u8 (ফ্ল্যাগ বিট 0 = বিগ এন্ডিয়ান, বিট 1 = সাইনড)
2 ছবি21 বাইটoffset:u64 width:u32 rows:u32 bpp:u8 stride:u32
3 Deflate0 বাইটnone: the framed stream holds raw segments and recompressed Deflate streams (section 7.9)



offset-এর আগের সবকিছু (হেডার, ট্যাগ, প্যালেট, MOD প্যাটার্ন) এবং স্যাম্পল বা পিক্সেল অঞ্চলের পরের সবকিছু (ট্রেইলিং চাংক) ফিল্টার করা ডেটার চারপাশে অপরিবর্তিত সংরক্ষিত হয়।

5.3 এনক্রিপ্টেড বডি ফ্রেমিং

এনক্রিপ্টেড ফ্ল্যাগ সেট থাকলে, zstd আউটপুট 64 KiB প্লেইনটেক্সটের চাংকে কাটা হয়। প্রতিটি চাংক একটি 32-বিট বিগ-এন্ডিয়ান দৈর্ঘ্য ও তারপর সাইফারটেক্সট হিসেবে সংরক্ষিত হয়, যা Poly1305 ট্যাগের কারণে 16 বাইট লম্বা। একটি চাংক শুধুমাত্র তখন সিল করা হয় যখন কমপক্ষে আরও একটি বাইট অনুসরণ করে, তাই শেষ চাংকটি কখনো খালি হয় না এবং চূড়ান্ত হিসেবে চিহ্নিত করা যায় (অনুচ্ছেদ 8.3)।

5.4 কেন একটি সলিড স্ট্রিম?

সব ফাইলকে একটি স্ট্রিম হিসেবে কমপ্রেস করলে কমপ্রেসার ফাইলের মধ্যে পুনরাবৃত্তি খুঁজে পায়, যা সোর্স ট্রি ও ডকুমেন্ট সংগ্রহে প্রচণ্ড গুরুত্বপূর্ণ (11 অধ্যায়ের বেঞ্চমার্ক দেখায় RAR-এর নন-সলিড আউটপুট 10,949টি ফাইলে তার সলিড আউটপুটের প্রায় দ্বিগুণ বড়)। এর মূল্য হলো সিকোয়েন্সিয়াল অ্যাক্সেস: একটি ফাইল এক্সট্র্যাক্ট করতে তার আগের অংশ ডিকমপ্রেস করতে হয়। nikpak মিডিয়া এন্ট্রিগুলো ডিকোড না করে এড়িয়ে গিয়ে এর খরচ কমায়।

5.5 ভার্সনিং

ভার্সন বাইটটি প্রোগ্রামের বোঝা সর্বোচ্চ ভার্সনের সাথে মিলিয়ে দেখা হয়। একটি নতুন আর্কাইভ একটি বিভ্রান্তিকর দূষণ ত্রুটির বদলে Unsupported archive version N; please update nikpak বার্তা উৎপন্ন করে। অজানা ফ্ল্যাগ, পদ্ধতি বা মিডিয়া ফিল্টার একইভাবে প্রত্যাখ্যাত হয়।

5.6 মাল্টি-ইঞ্জিন বডি (ভার্সন 3)

-m5 দিয়ে তৈরি আর্কাইভ পদ্ধতি 2 ব্যবহার করে। 5.2-এ বর্ণিত অভ্যন্তরীণ রেকর্ড স্ট্রিম অপরিবর্তিত, কিন্তু এটি শুধু এন্ট্রির মধ্যে, ব্লকে কাটা হয়, এবং প্রতিটি ব্লক তার নিজস্ব ইঞ্জিনে কমপ্রেস হয়। সংযোজিত করলে, ডিকমপ্রেস করা ব্লকগুলো হুবহু একটি একক-ইঞ্জিন আর্কাইভের রেকর্ড স্ট্রিম, তাই তালিকা, টেস্ট ও এক্সট্র্যাকশন একইভাবে কাজ করে।

উপাদানবিন্যাস
bodyblock* এবং তারপর একটি একক 0 বাইট
blockengine:u8 প্যারামিটার, তারপর ফ্রেম [u32 length 1 .. 1 MiB][কমপ্রেসড বাইট], একটি শূন্য দৈর্ঘ্য দিয়ে শেষ
ইঞ্জিন 1Zstandard (কোনো প্যারামিটার নেই)
ইঞ্জিন 2LZMA2 র স্ট্রিম: dictionary size u32, lc u8, lp u8, pb u8
ইঞ্জিন 3PPMd ভ্যারিয়েন্ট I (PPMd8): order u8, model size u32, restore method u8 (0 = restart)



ফ্রেমিং একটি রিডারকে ডিকোডারের উপর আস্থা না রেখে প্রতিটি ব্লকের শেষ খুঁজে পেতে দেয়, এবং প্রতিটি প্যারামিটার মেমরি বরাদ্দের আগে রেঞ্জ-চেক করা হয় (LZMA2 ডিকশনারি সর্বোচ্চ 1.5 GiB, PPMd মডেল সর্বোচ্চ 1 GiB, অর্ডার 2 থেকে 16)। এনক্রিপ্টেড হলে, বডিটি অন্য যেকোনো আর্কাইভের মতো একই অথেন্টিকেটেড চাংক দিয়ে সুরক্ষিত থাকে (8 অধ্যায়)।

6 কম্প্রেশন ইঞ্জিন

6.1 কেন Zstandard

Zstandard LZ77 ম্যাচিংকে Huffman কোডিং ও ফাইনাইট-স্টেট এনট্রপি (FSE) দিয়ে গঠিত একটি এনট্রপি ধাপের সাথে যুক্ত করে। ZIP-এর Deflate অ্যালগরিদমের তুলনায় এটি অনেক বড় উইন্ডোতে ম্যাচ খুঁজে পায়, লিটারাল ও ম্যাচ দৈর্ঘ্যকে আরও আঁটসাঁট এনট্রপি কোড দিয়ে মডেল করে এবং প্রতি সেকেন্ডে গিগাবাইট হারে ডিকোড করে। এটি একটি উন্মুক্ত, ব্যাপকভাবে অডিট করা ফরম্যাটও, যা nikpak-এর ডেটা স্বাধীন টুল দিয়ে পুনরুদ্ধারযোগ্য রাখে।

6.2 স্তর ম্যাপিং

nikpak RAR-শৈলীর স্তর (-m0 .. -m5) এবং zip-শৈলীর স্তর (-0 .. -9) উভয়ই গ্রহণ করে এবং সেগুলোকে Zstandard স্তরে ম্যাপ করে:

অপশনZstandard স্তরচরিত্র
-m0none (stored)কোনো কম্প্রেশন নেই, কোনো মিডিয়া ফিল্টার নেই
-m1 1দ্রুততম
-m2 3দ্রুত; একটি কোর-এ 197 MB-এর জন্য প্রায় 0.9 s (1.2.0 পর্যন্ত ডিফল্ট)
-m3 9ভালো ভারসাম্য
-m4 15উচ্চ; 128 MiB উইন্ডো ও লং-ডিস্ট্যান্স ম্যাচিং; Deflate রিকম্প্রেশন (7.9)
-m5 (default)LZMA2 / PPMdসর্বোচ্চ, এবং 1.2.1 থেকে ডিফল্ট: মাল্টি-ইঞ্জিন বডি (6.7) ও Deflate রিকম্প্রেশন



zip-শৈলীর স্তরগুলো এভাবে ম্যাপ হয়: -0 স্টোর করে, -1 থেকে -6 Zstandard 1 থেকে 6 ব্যবহার করে, -7 9 ব্যবহার করে, -8 12 ব্যবহার করে এবং -9 হলো -m5-এর মতোই।

6.3 বড় উইন্ডো ও লং-ডিস্ট্যান্স ম্যাচিং

Zstandard স্তর 15 ও তার উপরে nikpak একটি 2^27 বাইট (128 MiB) ম্যাচ উইন্ডো ও লং-ডিস্ট্যান্স ম্যাচিং চালু করে। সোর্স ট্রি, ডকুমেন্ট সেট ও ব্যাকআপে অনেক প্রায়-অভিন্ন ফাইল থাকে যা স্ট্রিমে বহু দূরে ছড়িয়ে থাকে; একটি সাধারণ 8 MiB উইন্ডো তাদের জুড়ে দেখতে পারে না। 197 MB টেস্ট সেটে এটি আউটপুট -m5-এ 26.3 MB থেকে 24.4 MB-তে এবং -m4-এ 29.5 MB থেকে 26.8 MB-তে নামিয়েছে, -m4-এর গতিতে কোনো খরচ ছাড়া এবং -m5-এ সামান্য খরচে। 2^27-এর একটি উইন্ডো Zstandard-এর ডিফল্ট ডিকোডার সীমার ভেতরে, তাই যেকোনো স্ট্যান্ডার্ড ডিকোডার ডেটা পড়তে পারে।

6.4 মাল্টি-থ্রেডিং

এনকোডার ইনপুটকে এমন কাজে ভাগ করে যা ওয়ার্কার থ্রেডে চলে (ডিফল্টে সব কোর)। তাই কম্প্রেশন গতি কোর সংখ্যার সাথে বাড়ে, কিন্তু ফরম্যাট একটি একক স্ট্রিমই থাকে। এই গাইডের সব সংখ্যা একটি কোরে মাপা হয়েছে; একটি সাধারণ মাল্টি-কোর মেশিনে nikpak দেখানোর চেয়ে যথেষ্ট দ্রুত।

6.5 স্ট্রিমের ভেতরে অখণ্ডতা

Zstandard ফ্রেম তার নিজস্ব কনটেন্ট চেকসাম বহন করে, nikpak প্রতি ফাইলে একটি CRC32 এবং এন্ট্রি সংখ্যাসহ একটি এন্ড মার্কার যোগ করে। তাই একটি ক্ষতিগ্রস্ত প্লেইন আর্কাইভ তিনটি স্তরে শনাক্ত হয়: ফ্রেম চেকসাম, প্রতি-ফাইল CRC এবং এন্ড মার্কার।

6.6 স্টোর মোড

-m0 এন্ট্রিগুলো অসংকোচিতভাবে লেখে। এটি ইতিমধ্যে কমপ্রেস করা ডেটার জন্য কার্যকর, এবং এটিই একমাত্র মোড যেখানে মিডিয়া ফিল্টার ইচ্ছাকৃতভাবে বাইপাস হয়: যে ব্যবহারকারী store চান তিনি ডেটা রূপান্তরিত হবে এমন আশা করেন না।

6.7 সর্বোচ্চ স্তর: LZMA2 ও PPMd

Zstandard গতির জন্য সঠিক ইঞ্জিন, কিন্তু এর সবচেয়ে শক্তিশালী সেটিংসেও এটি সোর্স কোড ও ডকুমেন্টে LZMA2-এর চেয়ে কয়েক শতাংশ পিছিয়ে, এবং গদ্যে PPMd-এর চেয়ে অনেক পিছিয়ে। ভার্সন 1.2 থেকে, -m5 তাই আর্কাইভটি দুটি ব্লক থেকে তৈরি করে (ফরম্যাট 5.6-এ):

  • বাইনারি ব্লক। ফোল্ডার, বাইনারি ফাইল, মিডিয়া এন্ট্রি ও Deflate-রিকম্প্রেস করা এন্ট্রি LZMA2 দিয়ে কমপ্রেস হয়: preset 9, nice length 273, match-finder depth 32, এবং ডেটার সাথে মানানসই একটি ডিকশনারি (1 থেকে 128 MiB)।
  • টেক্সট ব্লক। যেসব ফাইলের প্রথম 64 KiB-এ কোনো শূন্য বাইট নেই এবং প্রায় কোনো কন্ট্রোল অক্ষর নেই (সোর্স কোড, টেক্সট, CSV, HTML, XML ...) সেগুলো দ্বিতীয় ব্লকে যায়। এই ফাইলগুলোর চারটি সংলগ্ন 1 MiB রান PPMd ভ্যারিয়েন্ট I (order 8, 192 MiB মডেল) এবং টেক্সটের জন্য টিউন করা LZMA2 (lc 4, pb 0) দিয়ে ট্রায়াল-কমপ্রেস হয়, এবং ছোট ফলাফলটি জেতে। গদ্য PPMd-কে পছন্দ করে; অনেক প্রায়-অভিন্ন ফাইলসহ বড় সোর্স ট্রি LZMA2-কে পছন্দ করে, কারণ এটি ফাইলের জুড়ে দীর্ঘ পুনরাবৃত্তি কপি করতে পারে।
  • ক্রম। প্রতিটি ব্লকের ভেতরে, ফাইল এক্সটেনশন অনুযায়ী, তারপর ফাইলের নাম অনুযায়ী সাজানো হয়, যেমন 7-Zip করে, যাতে অভিন্ন বা অনুরূপ ফাইল পাশাপাশি থাকে। সংলগ্ন ট্রায়াল নমুনার সাথে মিলে, এটি সাধারণ ডেটা সেটকে 7.5 % ছোট করেছে।

"Extreme" LZMA2 সেটিংস পরিমাপ করে বাতিল করা হয়েছে: স্প্রেডশিট XML-এ সেগুলো দশ গুণ পর্যন্ত ধীর ছিল এবং ছোটও ছিল না। -m5 এক থ্রেডে চলে, -mt যাই হোক না কেন।

7 মিডিয়া বুদ্ধিমত্তা

একটি সাধারণ-উদ্দেশ্য কমপ্রেসার বাইট দেখে। এটি জানে না যে একটি WAV ফাইল একটি তরঙ্গরূপ যার পরের স্যাম্পল আগেরগুলো থেকে অনুমানযোগ্য, বা একটি ফটোগ্রাফের পাশের পিক্সেলগুলো প্রায় সমান। nikpak-এর মিডিয়া স্তর সেই জ্ঞান সরবরাহ করে: এটি এমন ফাইল চেনে, একটি লসলেস রূপান্তর প্রয়োগ করে যা অপ্রয়োজনীয়তা প্রকাশ করে, এবং কমপ্রেসারকে (বা একটি নিবেদিত কোডেককে) তা কাজে লাগাতে দেয়। এখানেই nikpak RAR-এর বিরুদ্ধে সবচেয়ে বেশি এগিয়ে যায়।

7.1 কনটেন্ট দ্বারা শনাক্তকরণ

শনাক্তকরণ কমপক্ষে 8 KiB-এর প্রতিটি ফাইলের প্রথম বাইট দেখে এবং এক্সটেনশনের উপর কখনো আস্থা রাখে না, তাই .dat নাম দেওয়া একটি WAV এখনো পাওয়া যায় এবং .wav নামের একটি টেক্সট ফাইল পাওয়া যায় না।

টাইপকীভাবে শনাক্ত হয়কী ফিল্টার হয়
WAVRIFF..WAVE, পূর্ণসংখ্যা PCM সহ একটি fmt চাংক (format 1, বা PCM সাব-ফরম্যাটসহ WAVE_FORMAT_EXTENSIBLE), 8/16/24/32 বিট, 1 থেকে 8 চ্যানেল, সামঞ্জস্যপূর্ণ ব্লক অ্যালাইনমেন্ট; তারপর data চাংকস্যাম্পল অঞ্চল। একটি শূন্য, অতিরিক্ত বড় বা ভুয়া ডেটা দৈর্ঘ্য ফাইলের মধ্যে সীমাবদ্ধ করা হয়; অবশিষ্ট বাইট ও ট্রেইলিং চাংক যেমন আছে তেমন রাখা হয়।
AIFF / AIFCFORM..AIFF বা AIFC (compression NONE বা twos), COMM ও SSND চাংক, বিগ-এন্ডিয়ান সাইনড স্যাম্পলসাউন্ড ডেটা অঞ্চল।
ProTracker MODঅফসেট 1080-এ স্বাক্ষর: M.K., M!K!, FLT4, 4CHN, 6CHN, 8CHN, FLT8, OCTA বা CD81প্যাটার্ন ডেটার পরের 8-বিট স্যাম্পল অঞ্চল (অনুচ্ছেদ 7.6)।
BMPBM, 40 বাইট বা তার বেশি একটি DIB হেডার, কোনো কম্প্রেশন নেই, প্রতি পিক্সেলে 8, 24 বা 32 বিট, পিক্সেল সারি যা ফাইলে ফিট করে, অঞ্চল 4 KiB থেকে 256 MiB-এর মধ্যেপিক্সেল সারিগুলো (অনুচ্ছেদ 7.7)।



হ্যান্ডেল করা হয় না, তাই সাধারণ কম্প্রেশনে সংরক্ষিত হয়: ফ্লোটিং-পয়েন্ট WAV, ADPCM ও অন্যান্য কমপ্রেস করা অডিও, RLE বা বিট-ফিল্ড BMP, এবং ProTracker MOD ছাড়া অন্যান্য ট্র্যাকার ফরম্যাট। MP3, JPEG, FLAC, PNG ও MP4-এর মতো ইতিমধ্যে কমপ্রেস করা মিডিয়া মোটেও শনাক্ত হয় না এবং স্পর্শ করা হয় না, কারণ সেগুলো রূপান্তর করলে কোনো লাভ হতো না।

7.2 ট্রায়াল: প্রতি ফাইলে সেরা ফিল্টার নির্বাচন

প্রতিটি ফাইলের জন্য কোনো একক রূপান্তর সেরা নয়। রেকর্ড করা মিউজিকে প্রেডিক্টিভ কোডিং জেতে; 8-বিট কমপ্যান্ডেড উৎস থেকে আসা অডিওতে (যেখানে প্রায় মাত্র এক হাজারটি ভিন্ন 16-বিট মান ঘটে) বাইট-প্লেন বিভাজন জেতে; নীরবতায় ও অত্যন্ত পুনরাবৃত্তিমূলক ট্র্যাকার স্যাম্পলে প্লেইন কম্প্রেশন জেতে। তাই nikpak অনুমান করার বদলে পরিমাপ করে।

  • একটি নমুনা নিন: স্যাম্পল অঞ্চল 3 MiB পর্যন্ত হলে পুরোটা, নাহলে অডিওর 5 %, 45 % ও 85 %-এ 768 KiB-এর তিনটি উইন্ডো। ছবির জন্য, প্রায় 4 MiB পর্যন্ত প্রথম সারিগুলো।
  • নমুনাটি প্লেইন Zstandard স্তর 3 (বেসলাইন) এবং প্রযোজ্য প্রতিটি ফিল্টার দিয়ে কমপ্রেস করুন: 16/24/32-বিট অডিওর জন্য NAC, Shuffle ও Shuffle+Delta; 8-বিট অডিওর জন্য NAC ও Shuffle+Delta; ছবির জন্য MED।
  • সবচেয়ে ছোট অনুমানওয়ালা ফিল্টার রাখুন, কিন্তু শুধু যদি তা বেসলাইনকে কমপক্ষে 2 % হারায়। নাহলে ফাইলটি সাধারণ কম্প্রেশনে সংরক্ষিত হয়।
  • বিজয়ীটি দিয়ে ফাইলটি লিখুন। এই সব প্রতি ফাইলে ঘটে, তাই একটি আর্কাইভে সাধারণ ফাইলের পাশে ভিন্ন পদ্ধতিতে কোড করা WAV থাকতে পারে।

nikpak mt পুরো ফাইলে একই পরিমাপ চালায় এবং একটি টেবিল প্রিন্ট করে, যা দিয়ে 11 অধ্যায়ের বেঞ্চমার্ক অনুসন্ধান করা হয়েছিল। অপশনে, -mc- ফিল্টার নিষ্ক্রিয় করে এবং -mc+ ট্রায়াল ছাড়া ডিফল্ট ফিল্টার জোর করে।

লসলেস, যাচাইকৃত এবং বাইপাসযোগ্য
প্রতিটি ফিল্টার হুবহু বিপরীতযোগ্য। প্রতিটি এন্ট্রির সাথে সংরক্ষিত CRC32 মূল বাইটের উপর গণনা করা হয় এবং এক্সট্র্যাকশনে পরীক্ষা করা হয়, NAC এনকোডার লেখার সময় প্রতিটি ব্লক যাচাই করে (অনুচ্ছেদ 7.4), এবং -mc- পুরো স্তরটি বন্ধ করে দেয়।



7.3 NAC অডিও কোডেক

NAC (nikpak audio codec) পূর্ণসংখ্যা PCM-এর জন্য একটি ব্লক-ভিত্তিক লসলেস কোডেক। এটি FLAC-এর মতোই একই পরিবারের: লিনিয়ার প্রেডিকশন ও তারপর Rice কোডিং। এর নিজস্ব বিট-স্ট্রিম আছে, এই আর্কাইভের জন্য নকশা করা, এবং এটি WAV, AIFF ও MOD ফাইলের স্যাম্পল ডেটার জন্য ব্যবহৃত হয়।

Figure 2: encoding one block of 4096 sample frames.
চিত্র 2: 4096 স্যাম্পল ফ্রেমের একটি ব্লক এনকোড করা।

ব্লক ও স্টেরিও ডিকোরিলেশন

অডিও 4096 স্যাম্পল ফ্রেমের ব্লকে কাটা হয়, প্রতিটি স্বাধীনভাবে কোড করা হয়, যা কোডেককে মজবুত করে (একটি ত্রুটি ছড়াতে পারে না) এবং এনকোডারকে পরিবর্তনশীল উপাদানের সাথে খাপ খাওয়াতে দেয়। স্টেরিওর জন্য, এনকোডার প্রতি ব্লকে চারটি রূপের একটি বেছে নেয়:

মোডকোড করা চ্যানেলপুনর্গঠন
0Left, Rightdirect
1Left, Side R = L - S
2Side, Right L = R + S
3Mid, Sidesum = (M << 1) | (S & 1), L = (sum + S) >> 1, R = (sum - S) >> 1



যেখানে Side = L - R এবং Mid = (L + R) >> 1। সাইড চ্যানেলে একটি সাধারণ চ্যানেলের চেয়ে একটি বিট বেশি লাগে এবং bits + 1 দিয়ে কোড হয়। মোডটি সস্তায় বেছে নেওয়া হয়: এনকোডার L, R, M ও S-এর order-2 ফিক্সড-প্রেডিক্টর রেসিডুয়ালের পরম মানের যোগফল করে এবং সবচেয়ে ছোট মোটওয়ালা জোড়াটি নেয়। যেসব রেকর্ডিংয়ের চ্যানেল দৃঢ়ভাবে সম্পর্কিত, সেখানে Mid/Side সাধারণত কয়েক শতাংশ বাঁচায়।

সাব-ফ্রেম টাইপ

একটি ব্লকের প্রতিটি কোড করা চ্যানেল চারটি সাব-ফ্রেমের একটি হিসেবে সংরক্ষিত হয়, যেটি সবচেয়ে ছোট:

টাইপব্যবহারখরচ
ধ্রুবকসব স্যাম্পল সমান (ডিজিটাল নীরবতা)পুরো ব্লকের জন্য 2 + স্যাম্পল-প্রস্থ বিট
Verbatimনয়েজের মতো উপাদান, বা নিরাপত্তা ফলব্যাকn x width বিট
ফিক্সডorder 0 থেকে 4-এর বহুপদী প্রেডিক্টরওয়ার্ম-আপ স্যাম্পল + রেসিডুয়াল
LPCপ্রেরিত সহগসহ order 1 থেকে 32-এর লিনিয়ার প্রেডিক্টরসহগ + ওয়ার্ম-আপ + রেসিডুয়াল



নষ্ট বিট। একটি ব্লকের প্রতিটি স্যাম্পলের নিচু বিট সবসময় শূন্য হলে (16-বিট কন্টেইনারে সংরক্ষিত একটি 8-বিট রেকর্ডিং, বা একটি কোয়ান্টাইজড সিগন্যাল), সেগুলো সরানো হয় এবং তাদের সংখ্যা 5 বিটে সংরক্ষিত হয়।

ফিক্সড প্রেডিক্টর

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টি স্যাম্পল ওয়ার্ম-আপ মান হিসেবে verbatim সংরক্ষিত হয়।

লিনিয়ার প্রেডিক্টিভ কোডিং (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 অর্ডার চেষ্টা হবে। বেশি অর্ডার মানে সামান্য ছোট ফলাফল ও ধীর এনকোডার; ডিকোডারের গতি একই।

আর্কাইভ স্তরNAC ইফোর্টচেষ্টা করা 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



order 0 থেকে 4-এর ফিক্সড প্রেডিক্টর সবসময় চেষ্টা হয়। বেঞ্চমার্কে ইফোর্ট স্তর স্টেরিও মিউজিকের ফলাফল 0.05 %-এর কম পরিবর্তন করেছে: বড় লাভ আসে মোটেও প্রেডিকশন ব্যবহার করা থেকে।

একটি ব্লকের বিট বিন্যাস

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



প্রতিটি ব্লক আর্কাইভে সামনে একটি 32-বিট দৈর্ঘ্যসহ সংরক্ষিত হয়, তাই ডিকোডার সবসময় জানে পরের ব্লক কোথায় শুরু হয়।

7.4 স্ব-যাচাই

একটি আর্কাইভ লেখাই এনকোডারের বাগ ধরার একমাত্র সুযোগ, তাই NAC এনকোডার নিজের উপর আস্থা রাখে না। প্রতিটি ব্লক এনকোড করার পর এটি ব্লকটি আবার ডিকোড করে এবং ফলাফল মূল স্যাম্পলের সাথে তুলনা করে। কোনো পার্থক্যে এটি ব্লকটি verbatim (যা ব্যর্থ হতে পারে না) হিসেবে পুনরায় এনকোড করে এবং আবার পরীক্ষা করে; তাও ব্যর্থ হলে, আর্কাইভিং একটি স্পষ্ট ত্রুটি ও -mc- ব্যবহারের পরামর্শ দিয়ে থামে। ফলব্যাক পাথটি ইউনিট টেস্ট দ্বারা অনুশীলিত হয়, যা বিট গভীরতা ও চ্যানেল সংখ্যার প্রতিটি সংমিশ্রণের জন্য verbatim কোডিং জোর করে, এবং প্রক্রিয়াটি একটি সম্ভাব্য নীরব ডেটা-লস বাগকে একটি শনাক্ত, পুনরুদ্ধারযোগ্য অবস্থায় রূপান্তর করে।

তার উপরে, ডিকোডারটি ফাজ করা হয়: ইউনিট টেস্টে হাজার হাজার র্যান্ডম বাইটের ব্লক ও ফ্লিপ করা বিটের ব্লক এতে দেওয়া হয়, এবং এটি প্যানিক না করে বা অস্বাভাবিক পরিমাণ মেমরি বরাদ্দ না করে একটি ত্রুটি ফেরাতে হবে। ডেভেলপমেন্টের সময় এটি একটি সত্যিকারের বাগ ধরেছিল (32-বিট উপাদানের জন্য Rice-প্যারামিটার সার্চ খালি হয়ে আসতে পারত এবং এমন একটি প্যারামিটারে ফিরে যেতে পারত যা একটি মাল্টি-গিগাবাইট কোড তৈরি করত); এটি ঠিক করা হয়েছে এবং একটি টেস্টে আচ্ছাদিত।

7.5 Shuffle ও Shuffle+Delta

কিছু অডিও প্রেডিকশনে সাড়া দেয় না। বেঞ্চমার্কে ব্যবহৃত গ্যালারি WAV ফাইলগুলো 16-বিট, তবু প্রায় মাত্র এক হাজারটি ভিন্ন স্যাম্পল মান ধারণ করে, কারণ সেগুলো একটি কমপ্যান্ডেড 8-বিট উৎস থেকে তৈরি হয়েছিল। একটি প্রেডিক্টর তা কাজে লাগাতে পারে না, এবং FLAC সেগুলোকে মূলের 84 %-এ কমপ্রেস করে, আর প্লেইন Zstandard লাগে 63 %। যা সাহায্য করে তা হলো বাইটগুলো এমনভাবে সাজানো যাতে কমপ্রেসার সমজাতীয় ডেটা দেখে:

  • Shuffle স্যাম্পলের বাইটগুলোকে প্লেনে আলাদা করে: চ্যানেল 0-এর সব লিস্ট-সিগনিফিক্যান্ট বাইট, তারপর চ্যানেল 0-এর সব মোস্ট-সিগনিফিক্যান্ট বাইট, তারপর চ্যানেল 1, ইত্যাদি, 32768 ফ্রেমের ব্লকে। উঁচু-বাইট প্লেন মসৃণ এবং নিচু-বাইট প্লেনের বর্ণমালা খুব সীমিত; Zstandard-এর এনট্রপি কোডার প্রতিটিকে ইন্টারলিভড মিশ্রণের চেয়ে অনেক ভালো মডেল করে।
  • Shuffle+Delta প্রথমে প্রতিটি স্যাম্পলকে একই চ্যানেলের আগের স্যাম্পলের সাথে তার পার্থক্য দিয়ে প্রতিস্থাপন করে (স্যাম্পল প্রস্থ মডুলো, তাই এটি হুবহু বিপরীতযোগ্য, ব্লক জুড়ে স্টেট বহন করা হয়) এবং তারপর শাফল করে। এটি সাহায্য করে যখন সিগন্যাল মসৃণ কিন্তু NAC জেতার জন্য যথেষ্ট অনুমানযোগ্য নয়।

35টি গ্যালারি ফাইলে প্রতি ফাইলে সেরা ফিল্টারসহ (ট্রায়াল দ্বারা নির্বাচিত) আর্কাইভটি -m2-এ মূল আকারের 51 % এবং -m5-এ 47 %, প্লেইন Zstandard-এর 63 %-এর বিপরীতে।

7.6 ProTracker MOD ফাইল

একটি MOD মডিউল হলো একটি 1084-বাইট হেডার (শিরোনাম, 31টি স্যাম্পল ডেসক্রিপ্টর, 128 এন্ট্রির একটি প্যাটার্ন অর্ডার টেবিল ও অফসেট 1080-এ একটি 4-বাইট স্বাক্ষর), তারপর প্যাটার্ন ডেটা, তারপর সব ইন্সট্রুমেন্টের র 8-বিট সাইনড স্যাম্পল। nikpak গণনা করে স্যাম্পল কোথায় শুরু হয় ও কত লম্বা:

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



হেডার ও প্যাটার্ন যেমন আছে তেমন সংরক্ষিত হয় (কমপ্রেসার সেই পুনরাবৃত্ত নোট ইভেন্টগুলো ভালো সামলায়) এবং স্যাম্পল অঞ্চলটি ট্রায়ালের জন্য একটি একক মনো, সাইনড, 8-বিট স্ট্রিম হিসেবে ধরা হয়। প্রতি ফাইলে, NAC, Shuffle+Delta বা প্লেইন কম্প্রেশন জেতে: স্যাম্পল করা ইন্সট্রুমেন্ট বেশিরভাগ NAC-কে পছন্দ করে, আর কিছু মডিউলে (যেমন খুব ছোট বা অত্যন্ত পুনরাবৃত্তিমূলক স্যাম্পলওয়ালা) প্লেইন কম্প্রেশন জেতে। কাটা মডিউলগুলো অঞ্চলটিকে আসলে উপস্থিত ডেটায় সীমাবদ্ধ করে সামলানো হয়।

7.7 BMP ছবি

একটি অসংকোচিত BMP চার বাইটের গুণিতকে প্যাড করা পিক্সেলের সারি সংরক্ষণ করে। ফিল্টারটি চারটি ধাপে কাজ করে:

  • ভাগ করুন পিক্সেল অঞ্চলকে প্রতি চ্যানেলে একটি প্লেনে (B, G, R, এবং 32-বিটের জন্য A), প্রতি-সারির প্যাডিং বাইট আলাদাভাবে মনে রেখে।
  • রঙ ডিকোরিলেট করুন। নীল ও লাল প্লেন থেকে সবুজ প্লেন বিয়োগ করুন (modulo 256)। ফটোগ্রাফে তিনটি চ্যানেল দৃঢ়ভাবে সম্পর্কিত, তাই পার্থক্যগুলো ছোট হয়।
  • প্রতিটি পিক্সেল অনুমান করুন তার প্রতিবেশীদের থেকে MED (মিডিয়ান এজ ডিটেক্টর) প্রেডিক্টর দিয়ে, যা LOCO-I ছবি কোডার ব্যবহার করে: বাম a, উপরে b ও উপর-বাম c-এর জন্য, অনুমান হলো min(a,b) যদি c >= max(a,b) হয়, max(a,b) যদি c <= min(a,b) হয়, নাহলে a + b - c। প্রেডিকশন ত্রুটি পিক্সেলটিকে প্রতিস্থাপন করে (modulo 256)। কিনারায় প্রেডিক্টর কিনারা অনুসরণ করে; মসৃণ গ্র্যাডিয়েন্টে এটি গ্র্যাডিয়েন্ট এক্সট্রাপোলেট করে।
  • সংযোজিত করুন রেসিডুয়াল প্লেন ও প্যাডিং বাইট এবং Zstandard-কে সেগুলো কমপ্রেস করতে দিন। মসৃণ অঞ্চল প্রায়-শূন্য বাইটের ধারায় পরিণত হয়।

ডিকোডার ধাপগুলো হুবহু বিপরীত করে। 8-বিট BMP রঙের ধাপটি বাদ দেয়; ট্রায়াল তখন সিদ্ধান্ত নেয় সেই প্যালেটের জন্য প্রেডিকশন সাহায্য করে কি না, কারণ প্যালেট ইনডেক্স অনুমান করা শুধু গ্রেস্কেল বা মসৃণভাবে সাজানো প্যালেটের জন্য অর্থবহ। মেমরি ব্যবহার সীমিত করতে 256 MiB-এর উপরের BMP ফাইল ফিল্টার করা হয় না।

7.8 কেন এটি RAR-কে হারায়

RAR মিডিয়াকে তার সাধারণ ম্যাচ-ও-Huffman ইঞ্জিন ও ছোট একটি বাইট ফিল্টার সেট দিয়ে কমপ্রেস করে। nikpak বরং অডিওকে একটি সত্যিকারের প্রেডিক্টিভ কোডেক দেয়, প্রতি-ব্লক স্টেরিও ডিকোরিলেশন ও অভিযোজিত Rice কোডিংসহ, ছবিকে একটি যথাযথ 2-D প্রেডিক্টর দেয় রঙ ডিকোরিলেশনসহ, এবং প্রতি ফাইলে পরিমাপের মাধ্যমে বেছে নেয়। ফল বেঞ্চমার্কে দৃশ্যমান: প্রতিটি ধরনের অডিওতে 12 থেকে 15 % ছোট, ট্র্যাকার মিউজিকে 13 % ও ফটোগ্রাফে 39 %, এবং স্টেরিও ট্র্যাকের NAC ফলাফল নিবেদিত FLAC এনকোডারের 0.2 %-এর মধ্যে।

7.9 অফিস ডকুমেন্ট, PDF ও gzip: Deflate রিকম্প্রেশন

আধুনিক অফিস ফাইল হলো XML-এর ZIP আর্কাইভ (docx, xlsx, pptx, odt, ods), এবং PDF ফাইল তাদের পেজ Deflate (FlateDecode) স্ট্রিমে সংরক্ষণ করে। তাই তাদের কনটেন্ট ইতিমধ্যে কমপ্রেস করা, এবং কোনো আর্কাইভার তা বেশি ছোট করতে পারে না: 1.1 বেঞ্চমার্কে, 6.6 MB .xlsx ফাইল 7-Zip-এ মাত্র 5.6 MB-তে নেমেছিল। nikpak 1.2 সেই বাধা সরিয়ে দেয়।

  • কনটেন্ট দ্বারা শনাক্তকরণ। ফাইলের শুরুতে একটি ZIP লোকাল হেডার (PK\x03\x04), %PDF- বা একটি gzip হেডার; এক্সটেনশন কখনো ব্যবহৃত হয় না।
  • ডিকোডিং। প্রতিটি Deflate স্ট্রিম পাওয়া যায় (পদ্ধতি 8 সহ ZIP এন্ট্রি, zlib হেডারসহ PDF স্ট্রিম, প্রতিটি gzip সদস্য) এবং preflate (Microsoft-এর preflate-rs) দিয়ে বিশ্লেষণ করা হয়। preflate প্লেইন ডেটা ও একটি ছোট সংশোধন রেকর্ড ফেরায় যা হুবহু বর্ণনা করে মূল এনকোডার কীভাবে তার পছন্দ করেছে, সেটি যেই এনকোডারই হোক।
  • সংরক্ষণ। ফাইলটি র সেগমেন্ট ও (plain, corrections) জোড়ার একটি ধারা হিসেবে সংরক্ষিত হয়। প্লেইন XML বা পেজ বিবরণ তারপর সলিড স্ট্রিমে যায়, যেখানে LZMA2 তা তার Deflate আকারের একটি ভগ্নাংশে কমপ্রেস করে।
  • যাচাই। ফলাফল ব্যবহারের আগে, nikpak প্রতিটি Deflate স্ট্রিম পুনর্নির্মাণ করে এবং পুরো ফাইলের দৈর্ঘ্য ও CRC32 মূলের সাথে তুলনা করে। কিছু ভিন্ন হলে, বা একটি বিকৃত ফাইলে preflate ব্যর্থ বা প্যানিক হলে, ফাইলটি সহজভাবে স্বাভাবিকভাবে সংরক্ষিত হয়।
  • এক্সট্র্যাকশন। Deflate স্ট্রিমগুলো বিট-ফর-বিট পুনরায় তৈরি হয়, তাই এক্সট্র্যাক্ট করা .docx বা .pdf বাইট-অভিন্ন, এবং এর CRC32 প্রতিটি এন্ট্রির মতোই পরীক্ষা করা হয়।

অনুচ্ছেদ 11.7-এর অফিস সেটে এটিই nikpak-কে অন্য প্রতিটি আর্কাইভারের চেয়ে ছোট করে। 6.6 MB .xlsx ফাইলে ডিকোডের পরে 71 MB XML থাকে, এবং সেই XML Deflate-এর চেয়ে অনেক ভালো কমপ্রেস হয়। খরচ হলো সময়: preflate প্রতি সেকেন্ডে প্রায় 15 MB প্লেইন ডেটা বিশ্লেষণ করে। সেজন্য রিকম্প্রেশন শুধু -m4 ও -m5-এ ব্যবহৃত হয়, যেখানে এটি লাভজনক (মাপা হয়েছে: -m3 ছয় গুণ সময়ে 0.5 % লাভ করেছিল)। সীমা: ফাইল 512 MiB পর্যন্ত, এবং প্রতি স্ট্রিমে 512 MiB প্লেইন ডেটা ও 64 MiB সংশোধন পর্যন্ত। -mc- এটি বন্ধ করে।

8 এনক্রিপশন

nikpak-এর এনক্রিপশন সম্পূর্ণরূপে স্ট্যান্ডার্ড, ভালোভাবে অধ্যয়ন করা উপাদান (Argon2id ও XChaCha20-Poly1305-এর RustCrypto ইমপ্লিমেন্টেশন) থেকে নির্মিত। এই প্রকল্পের জন্য কোনো প্রিমিটিভ উদ্ভাবন করা হয়নি; কাজটি তাদের সঠিকভাবে একত্র করার মধ্যে।

8.1 হুমকি মডেল

নকশাটি এমন একজন আক্রমণকারীকে ধরে নেয় যে আর্কাইভ ফাইলটি পায় এবং স্বাচ্ছন্দ্যে তা অধ্যয়ন ও পরিবর্তন করতে পারে, এবং যে অফলাইনে সীমাহীন পাসওয়ার্ড অনুমান চেষ্টা করতে পারে। nikpak নিশ্চিত করতে চায়:

  • ফাইলের কনটেন্ট এবং তাদের সম্পর্কে সবকিছুর গোপনীয়তা: নাম, আকার, টাইমস্ট্যাম্প, অনুমতি ও ফাইলের সংখ্যা।
  • অখণ্ডতা ও সত্যতা: আর্কাইভের যেকোনো পরিবর্তন, ডেটা, হেডার, ডেটার ক্রম বা এর দৈর্ঘ্য যাই হোক, ভুল ডেটা গৃহীত হওয়ার আগে শনাক্ত হয়।
  • অনুমান-প্রতিরোধ: প্রতিটি পাসওয়ার্ড অনুমানকে যথাসম্ভব ব্যয়বহুল করা হয়।

এটি লুকায় না যে একটি আর্কাইভ আছে, বা এর আনুমানিক আকার, এবং এটি সেই মেশিনের ম্যালওয়্যারের বিরুদ্ধে রক্ষা করতে পারে না যা আর্কাইভটি তৈরি বা খোলে, বা একটি দুর্বল পাসওয়ার্ডের বিরুদ্ধেও নয়।

8.2 পাসওয়ার্ড থেকে কী: Argon2id

একটি পাসওয়ার্ড একটি দুর্বল কী: ছোট, অনুমানযোগ্য এবং মানুষের টাইপ করা। এটিকে Argon2id দিয়ে একটি 256-বিট কী-তে রূপান্তর করা হয়, যা Password Hashing Competition-এর বিজয়ী এবং RFC 9106-এ মানীকৃত অ্যালগরিদম। Argon2id ইচ্ছাকৃতভাবে মেমরি-হার্ড: একটি কী গণনা করতে একটি বড় মেমরি ব্লক লাগে যা পূর্ণ হয় এবং তারপর একটি ডেটা-নির্ভর প্যাটার্নে বারবার পড়া হয়। nikpak RFC-এর লো-মেমরি প্রোফাইল ব্যবহার করে:

প্যারামিটারমানঅর্থ
মেমরি64 MiBপ্রতিটি অনুমানে 64 MiB দ্রুত মেমরি লাগে
পাস 3মেমরিটি তিনবার প্রসেস হয়
লেন 4একটি ডেরিভেশনের ভেতরে সমান্তরালতার মাত্রা
সল্ট16 র্যান্ডম বাইটপ্রতি আর্কাইভে নতুন: অভিন্ন পাসওয়ার্ড ভিন্ন কী দেয়, এবং আগে-গণনা করা টেবিল অকেজো
আউটপুট32 বাইটXChaCha20-Poly1305 কী



মেমরি-হার্ডনেসই Argon2id-কে পুরনো PBKDF2 (RAR5 ও ZIP-এর AES মোডে ব্যবহৃত) থেকে আলাদা করে: PBKDF2-এর প্রায় কোনো মেমরি লাগে না, তাই একটি গ্রাফিক্স কার্ড বা কাস্টম চিপ সমান্তরালে বিশাল সংখ্যক অনুমান পরীক্ষা করতে পারে। Argon2id-এর সাথে আক্রমণকারীর হার্ডওয়্যারকে প্রতি সমান্তরাল অনুমানে 64 MiB সরবরাহ করতে হয়, যা সেই সুবিধার বেশিরভাগ সরিয়ে দেয়। বৈধ ব্যবহারকারীর খরচ একটি সেকেন্ডের ভগ্নাংশ, প্রতি আর্কাইভে একবার।

প্যারামিটারগুলো হেডারে সংরক্ষিত থাকে, তাই ভবিষ্যৎ ভার্সন পুরনো আর্কাইভ না ভেঙে সেগুলো বাড়াতে পারে। পড়ার সময়, সেগুলো আগে রেঞ্জ-চেক করা হয় (মেমরি 8 x lanes 1 GiB পর্যন্ত, passes 1 থেকে 64, lanes 1 থেকে 64) যাতে একটি ক্ষতিকর আর্কাইভ পাসওয়ার্ড পরীক্ষার আগে nikpak-কে অস্বাভাবিক পরিমাণ মেমরি বরাদ্দ করাতে না পারে।

8.3 STREAM নির্মাণে XChaCha20-Poly1305

বাল্ক ডেটা XChaCha20-Poly1305 দিয়ে সুরক্ষিত, একটি অথেন্টিকেটেড-এনক্রিপশন-উইথ-অ্যাসোসিয়েটেড-ডেটা (AEAD) সাইফার: ChaCha20 একটি 256-বিট-কী স্ট্রিম সাইফার সরবরাহ করে, X ভ্যারিয়েন্ট এর নন্সকে 192 বিটে বাড়ায় (র্যান্ডমে বেছে নেওয়ার জন্য যথেষ্ট বড়, কখনো পুনরাবৃত্তি ছাড়া), এবং Poly1305 প্রতিটি সিল করা বার্তায় একটি 128-বিট অথেন্টিকেশন ট্যাগ যোগ করে। ChaCha20 বিশেষ নির্দেশনা ছাড়াই প্রতিটি CPU-তে দ্রুত এবং, টেবিল-ভিত্তিক AES-এর মতো নয়, স্বাভাবিকভাবে ক্যাশ-টাইমিং লিক থেকে মুক্ত।

একটি আর্কাইভ একটি বার্তার চেয়ে অনেক বড়, তাই nikpak STREAM নির্মাণ ব্যবহার করে (যা আধুনিক ফাইল-এনক্রিপশন টুল ব্যবহার করে): ডেটা 64 KiB চাংকে কাটা হয় এবং i নম্বর চাংকটি নন্সের অধীনে সিল হয়

nonce (24 bytes) = random prefix (19 bytes)
| chunk counter (4 bytes, big endian)
| last-chunk flag (1 byte)



এটি একসাথে তিনটি নিশ্চয়তা দেয়। প্রতিটি চাংকের একটি অনন্য নন্স আছে, যা স্ট্রিম সাইফারের জন্য অপরিহার্য। কাউন্টারটি নন্সের অংশ হওয়ায়, চাংক পুনর্বিন্যাস বা নকল করা অথেন্টিকেশন ব্যর্থ করে। চূড়ান্ত চাংক একটি ভিন্ন ফ্ল্যাগ বহন করায়, আর্কাইভ ছোট করে কাটা, এমনকি ঠিক একটি চাংক সীমানায়, অথেন্টিকেশন ব্যর্থ করে: নতুন শেষ চাংকটি একটি অ-চূড়ান্ত হিসেবে সিল ছিল। 19-বাইট প্রিফিক্সটি প্রতি আর্কাইভে র্যান্ডম।

এছাড়া, সম্পূর্ণ আর্কাইভ হেডার (ভার্সন, ফ্ল্যাগ, পদ্ধতি, Argon2id প্যারামিটার, সল্ট ও নন্স প্রিফিক্স) প্রতিটি চাংকে অ্যাসোসিয়েটেড ডেটা হিসেবে দেওয়া হয়। এটি অথেন্টিকেটেড কিন্তু এনক্রিপ্টেড নয়; এর যেকোনো বিট ফ্লিপ করলে প্রতিটি চাংক ব্যর্থ হয়। এটি ডাউনগ্রেড আক্রমণও আটকায় যা সংরক্ষিত প্যারামিটার দুর্বল করার চেষ্টা করত।

আইটেমমান
সাইফারXChaCha20-Poly1305: 256-বিট কী, 192-বিট নন্স, 128-বিট ট্যাগ
চাংক64 KiB পর্যন্ত প্লেইনটেক্সট; u32 length + সাইফারটেক্সট + 16-বাইট ট্যাগ হিসেবে সংরক্ষিত
আকারের অতিরিক্ত খরচপ্রায় 0.03 % (প্রতি 64 KiB-এ 20 বাইট), একটি 222 MB ডেটা সেটে 0.03 % মাপা হয়েছে
গতির অতিরিক্ত খরচমাপা হয়েছে: একটি 222 MB ডেটা সেটে মোট +0.3 s (0.64 s-এর বদলে 0.92 s), কী ডেরিভেশনসহ
ভুল পাসওয়ার্ডপ্রথম চাংকেই শনাক্ত হয়; কোনো প্লেইনটেক্সট উৎপন্ন হয় না



8.4 একজন পর্যবেক্ষক কী দেখতে পারে ও পারে না

পাসওয়ার্ড ছাড়া দৃশ্যমানসুরক্ষিত
ম্যাজিক সংখ্যা, ভার্সন, ফ্ল্যাগ ও কম্প্রেশন পদ্ধতিফাইলের নাম ও ফোল্ডার কাঠামো
Argon2id প্যারামিটার, সল্ট ও নন্স প্রিফিক্সফাইলের আকার, টাইমস্ট্যাম্প ও অনুমতি
মোট আর্কাইভ আকার ও চাংকের সংখ্যাফাইলের সংখ্যা
এটি একটি nikpak আর্কাইভ এই সত্যসব কনটেন্ট, এতে মিডিয়া আছে কি না সহ



এনক্রিপ্টের আগে কমপ্রেস করার একটি ফল হলো আর্কাইভের আকার প্রতিফলিত করে ডেটা কতটা সংকোচনযোগ্য। এটি প্রতিটি আর্কাইভারের অন্তর্নিহিত যা কমপ্রেস ও এনক্রিপ্ট করে; এটি কেবল তখনই গুরুত্বপূর্ণ যদি একজন আক্রমণকারী ডেটার অংশ নিয়ন্ত্রণ করতে পারে ও আকার পর্যবেক্ষণ করতে পারে, যা ফাইল আর্কাইভ করার ক্ষেত্রে প্রযোজ্য নয়।

8.5 পাসওয়ার্ড পরিচালনা

  • সর্বনিম্ন দৈর্ঘ্য। একটি আর্কাইভ তৈরি করার সময় 8 অক্ষর; ছোট পাসওয়ার্ড ব্যাখ্যাসহ প্রত্যাখ্যাত হয়।
  • নিশ্চিতকরণ। ইন্টারঅ্যাক্টিভ প্রম্পট দুবার জিজ্ঞাসা করে, টাইপ করা অক্ষর প্রতিধ্বনিত করে না, এবং অমিল প্রত্যাখ্যান করে।
  • জেনারেশন। পাসওয়ার্ড না থাকলে, nikpak একটি 56-প্রতীকের বর্ণমালা থেকে 24টি অক্ষর টানে যা দেখতে-একই অক্ষর বাদ দেয় (0/O, 1/l/I), অপারেটিং সিস্টেমের ক্রিপ্টোগ্রাফিকভাবে নিরাপদ র্যান্ডম জেনারেটরে রিজেকশন স্যাম্পলিং ব্যবহার করে যাতে কোনো প্রতীক অন্যটির চেয়ে বেশি সম্ভাব্য না হয়। তা হলো 24 x log2(56), প্রায় 139 বিট এনট্রপি, এবং এটি একবার, একটি স্পষ্ট চিহ্নিত বাক্সে দেখানো হয়।
  • মেমরি পরিচ্ছন্নতা। ডেরাইভ করা কী ও পাসওয়ার্ড স্ট্রিং মেমরি থেকে মুছে ফেলা হয় যখন আর প্রয়োজন নেই (zeroize ক্রেট)।
  • চ্যানেল। কমান্ড লাইন (-p), এনভায়রনমেন্ট ভেরিয়েবল NIKPAK_PASSWORD, ইন্টারঅ্যাক্টিভ প্রম্পট, বা টার্মিনাল না থাকলে stdin। কমান্ড-লাইন ফর্ম সুবিধাজনক কিন্তু প্রসেস তালিকায় দৃশ্যমান; অন্য ফর্মগুলো পছন্দনীয়।

8.6 আক্রমণ পরীক্ষা

এনক্রিপ্টেড আর্কাইভের নিম্নলিখিত কারসাজিগুলো সমাপ্ত প্রোগ্রামের বিরুদ্ধে চালানো হয়েছিল। কোনো ভুল ডেটা গৃহীত হওয়ার আগে সবগুলো শনাক্ত হয়েছিল:

কারসাজিফলাফল
সাইফারটেক্সটের মাঝখানে একটি একক বাইট ফ্লিপ করুনপ্রত্যাখ্যাত: অথেন্টিকেশন ব্যর্থ (exit 11)
হেডারে সল্টের একটি বাইট ফ্লিপ করুনপ্রত্যাখ্যাত (হেডার অ্যাসোসিয়েটেড ডেটা এবং কী পরিবর্তিত হয়)
হেডারে পদ্ধতি বাইট পরিবর্তন করুনপ্রত্যাখ্যাত
ফাইলটি 100 বাইট ছোট করুনক্ষতিগ্রস্ত হিসেবে প্রত্যাখ্যাত (exit 3)
চূড়ান্ত চাংকটি ঠিক একটি চাংক সীমানায় মুছুনপ্রত্যাখ্যাত: নতুন শেষ চাংকে চূড়ান্ত ফ্ল্যাগ নেই
দুটি চাংক অদলবদল করুনপ্রত্যাখ্যাত: কাউন্টার অমিল
ভুল পাসওয়ার্ড দিনপ্রথম চাংকেই প্রত্যাখ্যাত (exit 11)
একটি র্যান্ডম ফাইলকে আর্কাইভ হিসেবে দিনপ্রত্যাখ্যাত: খারাপ স্বাক্ষর (exit 3)



অবশিষ্ট ঝুঁকি, স্পষ্টভাবে বলা হয়েছে
একটি দুর্বল পাসওয়ার্ড সবসময় অনুমান করা যায়; Argon2id এটিকে ব্যয়বহুল করে কিন্তু password123-কে রক্ষা করতে পারে না। nikpak স্বাধীনভাবে অডিট হয়নি। এটি কীলগার, ম্যালওয়্যার বা চলমান প্রসেসের মেমরি পড়ার কারও বিরুদ্ধে রক্ষা করতে পারে না। যেসব ডেটা ফাঁস হলে গুরুতর ক্ষতি হতো, সেগুলোর জন্য প্রথমে একজন ক্রিপ্টোগ্রাফার দিয়ে ইমপ্লিমেন্টেশন পর্যালোচনা করান।



9 কোয়ান্টাম প্রতিরোধ

কোয়ান্টাম কম্পিউটার কিছু ক্রিপ্টোগ্রাফিকে মারাত্মকভাবে হুমকি দেয় এবং অন্য ক্রিপ্টোগ্রাফিকে প্রায় একেবারেই নয়। nikpak সেই দিকে নকশা করা হয়েছে যা খুব কমই প্রভাবিত হয়।

9.1 কোয়ান্টাম কম্পিউটার কী পরিবর্তন করে

অ্যালগরিদমপ্রভাবকে প্রভাবিত হয়
Shor (1994)পলিনোমিয়াল সময়ে পূর্ণসংখ্যা উৎপাদকে বিশ্লেষণ করে এবং ডিসক্রিট লগারিদম গণনা করেRSA, Diffie-Hellman, DSA, ইলিপ্টিক-কার্ভ ক্রিপ্টোগ্রাফি: একটি বড় কোয়ান্টাম কম্পিউটারে ভেঙে যায়
Grover (1996)N আইটেমের একটি অসংগঠিত স্থানে প্রায় N-এর বর্গমূল সংখ্যক ধাপে খোঁজেসিমেট্রিক কী ও হ্যাশ ফাংশন: কার্যকর কী দৈর্ঘ্য অর্ধেক হয়ে যায়



Shor-এর অ্যালগরিদমটি নাটকীয়: এটি পাবলিক-কী গণিতের উপর নির্ভরশীল প্রতিটি সিস্টেম ভেঙে দেবে, যে কারণে সরকার ও মান সংস্থাগুলো ML-KEM (FIPS 203)-এর মতো পোস্ট-কোয়ান্টাম পাবলিক-কী অ্যালগরিদমে স্থানান্তরিত হচ্ছে। Grover-এর অ্যালগরিদমটি মৃদু: একটি 256-বিট কী এর বিরুদ্ধে প্রায় 128 বিট নিরাপত্তা দেয়, এবং Grover-এর পুনরাবৃত্তিগুলো স্বভাবতই সিকোয়েন্সিয়াল, তাই কাজটি বহু কোয়ান্টাম মেশিনে ছড়িয়ে দিলে তাদের সংখ্যার শুধু বর্গমূল গতি-বৃদ্ধি পাওয়া যায়।

9.2 nikpak-এর অবস্থান

উপাদানপ্রিমিটিভকোয়ান্টাম প্রভাব
এনক্রিপশনXChaCha20, 256-বিট কীসবচেয়ে ভালো পরিচিত আক্রমণ: Grover, প্রায় 2^128 অপারেশন। নাগালের বাইরে।
অথেন্টিকেশনPoly1305, 128-বিট ট্যাগ, 256-বিট গোপন থেকে কী করাকোনো পাবলিক-কী গণিত জড়িত নয়
পাসওয়ার্ড থেকে কীArgon2id, 64 MiB, 3 পাসGrover সর্বোচ্চ পাসওয়ার্ডের এনট্রপি অর্ধেক করতে পারে, এবং প্রতিটি পুনরাবৃত্তিতে একটি মেমরি-হার্ড ফাংশন মূল্যায়ন করতে হবে
র্যান্ডমনেসঅপারেটিং-সিস্টেম CSPRNGঅপ্রভাবিত
পাবলিক-কী ক্রিপ্টোগ্রাফিকিছুই নাShor-এর অ্যালগরিদমের আক্রমণের মতো কিছুই নেই



একটি 256-বিট সিমেট্রিক কী হলো NIST-এর পোস্ট-কোয়ান্টাম মানীকরণের সর্বোচ্চ নিরাপত্তা বিভাগের (বিভাগ 5) রেফারেন্স: NIST-এর মানীকৃত পাবলিক-কী অ্যালগরিদমগুলো মূল্যায়ন করা হয় একটি 256-বিট AES কী-এর এক্সহস্টিভ সার্চের কঠিনতার সাথে কতটা মেলে তার ভিত্তিতে। অন্য কথায়, nikpak-এর ডেটা এনক্রিপশন ইতিমধ্যেই সেই শক্তিতে দাঁড়িয়ে আছে যা পোস্ট-কোয়ান্টাম মান লক্ষ্য করে।

9.3 পাসওয়ার্ডের কী হবে?

সাইফারের কী স্থান 256 বিট, কিন্তু কী একটি পাসওয়ার্ড থেকে ডেরাইভ হয়, তাই আসল শক্তি হলো পাসওয়ার্ডের এনট্রপি ও 256 বিটের মধ্যে ছোটটি। একটি কোয়ান্টাম প্রতিপক্ষের বিরুদ্ধে পাসওয়ার্ডের এনট্রপি, আক্রমণকারীর জন্য সর্বোত্তম ক্ষেত্রে, অর্ধেক হয়:

পাসওয়ার্ডএনট্রপিক্লাসিক্যাল সার্চGrover সার্চ (সর্বোত্তম ক্ষেত্রে)
nikpak-উৎপন্ন (24 প্রতীক)প্রায় 139 বিটপ্রায় 2^139 অনুমানপ্রায় 2^70 পুনরাবৃত্তি, প্রতিটিতে একটি সুসংগত 64 MiB Argon2id মূল্যায়ন লাগে
ছয়টি র্যান্ডম Diceware শব্দপ্রায় 77 বিটপ্রায় 2^77 অনুমানএকই ব্যয়বহুল সার্কিটের প্রায় 2^39 পুনরাবৃত্তি
মানুষের বেছে নেওয়া 10-অক্ষরের পাসওয়ার্ডসাধারণত 30 - 45 বিটসম্ভবপরসম্ভবপর



উপসংহারটি পরিচিত, আরও তীক্ষ্ণভাবে বলা: দুর্বল বিন্দু হলো পাসওয়ার্ড, সাইফার নয়। তৈরি করা পাসওয়ার্ড বা একটি দীর্ঘ র্যান্ডম পাসফ্রেজ ব্যবহার করুন এবং আর্কাইভটি যেকোনো অনুমানযোগ্য ভবিষ্যতের জন্য ক্লাসিক্যাল ও কোয়ান্টাম উভয় আক্রমণকারীকে প্রতিহত করবে। Argon2id উভয় জগতেই সাহায্য করে, কারণ প্রতিটি অনুমানের খরচ মেমরি দ্বারা প্রভাবিত, যা Grover-এর অ্যালগরিদম সস্তা করে না।

9.4 "এখন সংগ্রহ করুন, পরে ডিক্রিপ্ট করুন"

একটি প্রায়ই উদ্ধৃত কোয়ান্টাম হুমকি হলো একজন প্রতিপক্ষ আজ এনক্রিপ্টেড ডেটা রেকর্ড করে এবং একটি কোয়ান্টাম কম্পিউটার এলে তা ডিক্রিপ্ট করে। RSA বা ইলিপ্টিক কার্ভ দিয়ে কী বিনিময় করা সিস্টেমের জন্য, যেমন TLS সংযোগ বা ই-মেইল এনক্রিপশন, এটি বাস্তব। একটি nikpak আর্কাইভের কোনো কী বিনিময় নেই: এর কী আসে এমন একটি গোপন থেকে যা কখনো ব্যবহারকারীর মাথা বা পাসওয়ার্ড ম্যানেজার ছেড়ে যায় না। একটি সংরক্ষিত কপি পরে শুধু সেই গোপনটি অনুমান করে খোলা যেতে পারে, এবং কোয়ান্টাম কম্পিউটার তা মৌলিকভাবে সহজ করে না।

9.5 সৎ সীমাবদ্ধতা ও সামনের পথ

  • "কোয়ান্টাম-প্রতিরোধী" মানে এই প্রিমিটিভগুলোর বিরুদ্ধে কোনো পরিচিত কোয়ান্টাম অ্যালগরিদম জেনেরিক সার্চকে হারায় না। এটি কোনো প্রমাণ নয়; ChaCha20 ও Argon2-এর ক্রিপ্ট্যানালাইসিস চলমান, এবং ফরম্যাট ভার্সনযুক্ত যাতে প্যারামিটার বা অ্যালগরিদম পরিবর্তন করা যায়।
  • পাবলিক-কী শেয়ারিং কখনো যোগ করা হলে (একটি প্রাপকের কী-তে একটি আর্কাইভ এনক্রিপ্ট করা), এটি একটি হাইব্রিড স্কিম ব্যবহার করবে, ML-KEM-এর সাথে মিলিয়ে X25519, যাতে যেকোনো একটি উপাদান টিকে থাকলেও তা নিরাপদ হয়।
  • কোয়ান্টাম প্রতিরোধ ইমপ্লিমেন্টেশন ত্রুটির বিরুদ্ধে রক্ষা করে না। দেখুন অনুচ্ছেদ 8.6 ও 10।

10 হার্ডেনিং ও দৃঢ়তা

একটি আর্কাইভার অপরিচিতদের লেখা ফাইল পড়ে এবং তার ব্যবহারকারীর ডিস্কে ফাইল লেখে, যা এটিকে একটি ক্লাসিক লক্ষ্য করে তোলে। nikpak প্রতিটি আর্কাইভকে অবিশ্বস্ত ইনপুট হিসেবে গণ্য করে।

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-তে একটি মেমরি-দুর্নীতির বাগ হওয়ার মতো যেকোনো লজিক ত্রুটিকে একটি পরিচ্ছন্ন ব্যর্থতায় রূপান্তর করে।

nikpak একটি আর্কাইভের সম্প্রসারণ অনুপাত সীমাবদ্ধ করে না, তাই প্রতিটি আর্কাইভারের মতোই, একটি ইচ্ছাকৃতভাবে তৈরি "কম্প্রেশন বোমা" এক্সট্র্যাক্টের সময় ডিস্ক ভরিয়ে দিতে পারে। বিষয়টি গুরুত্বপূর্ণ হলে অজানা আর্কাইভ আগে t দিয়ে পরীক্ষা করুন।

10.3 নিরাপদ সৃষ্টি ও সৎ ত্রুটি

  • আর্কাইভটি name.nik.tmp-তে লেখা হয় এবং শুধু সম্পূর্ণ হলে নাম বদলানো হয়; যেকোনো ব্যর্থতায় একটি গার্ড অস্থায়ী ফাইলটি মুছে দেয়, তাই একটি বিঘ্নিত রান কখনো একটি অর্ধ-লেখা বা প্রতিস্থাপিত আর্কাইভ ফেলে রাখে না।
  • একটি ফাইল আর্কাইভ করার সময় ছোট হয়ে গেলে, nikpak একটি অসামঞ্জস্যপূর্ণ এন্ট্রি লেখার বদলে একটি স্পষ্ট বার্তাসহ বাতিল করে। অপাঠ্য ফাইল, সিম্বলিক লিংক ও বিশেষ ফাইল একটি সতর্কতাসহ (এক্সিট কোড 1) এড়িয়ে যাওয়া হয় এবং আর্কাইভটি কখনো নিজের সাথে যোগ হয় না।
  • ত্রুটিগুলো শ্রেণিবদ্ধ করা হয় যাতে স্ক্রিপ্ট প্রতিক্রিয়া জানাতে পারে: একটি আর্কাইভের ভেতরে চেকসাম বা ফ্রেম ত্রুটি দূষণ (exit 3), একটি অথেন্টিকেশন ব্যর্থতা ভুল পাসওয়ার্ড বা বিকৃতি (exit 11), একটি প্রত্যাখ্যাত লেখা মারাত্মক ত্রুটি (exit 2)।

11 বেঞ্চমার্ক

এই অধ্যায়টি পরিমাপ উপস্থাপন করে, দাবি নয়। এটি হুবহু বর্ণনা করে কী মাপা হয়েছিল, যে ফলাফলগুলো nikpak-এর অনুকূলে নয় সেগুলোও অন্তর্ভুক্ত করে, এবং সবকিছু পুনরাবৃত্তির জন্য প্রয়োজনীয় কমান্ড দেয়।

অনুচ্ছেদ 11.1 থেকে 11.6 nikpak 1.1.0 দিয়ে মাপা হয়েছিল, যার -m5 তখনো Zstandard ব্যবহার করত। অনুচ্ছেদ 11.7 এক মেশিনে nikpak 1.2.0-কে RAR, 7-Zip ও ZIP-এর সাথে তুলনা করে।

11.1 পদ্ধতি

আইটেমবিবরণ
মেশিনLinux x86-64 ভার্চুয়াল মেশিন, একটি CPU কোর। সব সময় সেই একক কোরে ওয়াল-ক্লক সেকেন্ড; মাল্টি-কোর মেশিন উভয় টুলের জন্য দ্রুত।
সফটওয়্যারRAR 7.00 (26 Feb 2024, Linux ট্রায়াল বিল্ড, -ma5 ফরম্যাট); nikpak 1.1.0 LTO সহ release মোডে বিল্ট; অডিও রেফারেন্স হিসেবে FLAC 1.x -8।
RAR সেটিংস-m3 (RAR-এর ডিফল্ট) ও -m5 (সেরা)। সাধারণ-ডেটা টেস্টের জন্য -s (সলিড) ও -md256m (256 MB ডিকশনারি)-ও, কারণ nikpak আর্কাইভ সবসময় সলিড এবং একটি ন্যায্য তুলনার জন্য RAR-কে একই সুবিধা দিতে হবে।
যাচাইপ্রতিটি nikpak আর্কাইভ এক্সট্র্যাক্ট করে মূলের সাথে তুলনা করা হয়েছিল (মিডিয়া ফাইলের জন্য cmp, সাধারণ সেটের সব 10,949টি ফাইলের SHA-256)।



টেস্ট উপাদান

সেটকনটেন্ট
গ্যালারি WAVLibreOffice-এর গ্যালারি থেকে 35টি সাউন্ড ফাইল: মনো 16-বিট, 23টি 11,025 Hz-এ ও 12টি 22,050 Hz-এ। এগুলোতে প্রায় মাত্র এক হাজারটি ভিন্ন স্যাম্পল মান থাকে (কমপ্যান্ডেড উৎস) এবং প্রেডিক্টিভ কোডিংয়ের জন্য ইচ্ছাকৃতভাবে একটি অসুবিধাজনক কেস।
মিউজিকএকটি 100-সেকেন্ডের বহু-ইন্সট্রুমেন্ট টুকরা (পিয়ানো, স্ট্রিং, বেস, বাঁশি, ড্রাম) TiMidity++ ও Freepats সাউন্ড দিয়ে 44.1 kHz স্টেরিও 16-বিটে (17.4 MB) রেন্ডার করা। SoX থেকে একটি 22.05 kHz মনো 16-বিট, একটি 22.05 kHz মনো 8-বিট ও একটি 48 kHz স্টেরিও 24-বিট ভার্সন তৈরি হয়েছে।
MODlibxmp টেস্ট সংগ্রহ থেকে 16টি ProTracker মডিউল।
BMP6টি ছবি: scikit-image স্যাম্পল সেট থেকে পাঁচটি ফটোগ্রাফ (24-বিট, সাথে একটির একটি 8-বিট গ্রেস্কেল রূপান্তর) এবং TeX Live থেকে একটি টেক্সচার।
সাধারণ ডেটা10,949টি ফাইলে 197.6 MB: টেস্ট মেশিনের Python স্ট্যান্ডার্ড লাইব্রেরি ও প্যাকেজ, ডকুমেন্টেশন ও C হেডার, সিম্বলিক লিংক সরানো।



এই টেস্ট উপাদানের সীমাবদ্ধতা
মিউজিকটি কৃত্রিম: এটি MIDI থেকে রেন্ডার করা এবং এতে পুনরাবৃত্ত অংশ আছে, যা প্রতিটি LZ-ভিত্তিক টুলকে সাহায্য করে, NAC-এর পরের Zstandard ধাপসহ। বাস্তব রেকর্ডিংয়ে সঠিক পুনরাবৃত্তি কম থাকে, তাই অ্যাবসোলিউট আকার ভিন্ন হবে। তুলনাটি সব টুলকে সমানভাবে গণ্য করে, এবং একই ফাইলে FLAC-এর ফলাফল নিশ্চিত করে যে অডিও কোডেকটি নিজেই প্রতিযোগিতামূলক, কিন্তু নির্দিষ্ট উপাদানওয়ালা পাঠকদের তা মাপা উচিত: nikpak mt হুবহু সেটাই করে।



11.2 মিডিয়া ফাইল

সেটমূলRAR 7 -m5nikpak -m2nikpak -m5m5 বনাম RAR
6টি BMP ফটোগ্রাফ 9,183,956 2,862,744 2,035,223 1,750,70638.8 % ছোট
16টি ProTracker MOD ফাইল 2,507,557 1,070,290 966,622 927,97313.3 % ছোট
35টি গ্যালারি WAV (মনো 16-বিট) 2,991,820 1,605,879 1,529,219 1,418,53211.7 % ছোট
মিউজিক 44.1 kHz স্টেরিও 16-বিট 17,371,848 11,024,411 9,415,519 9,411,89814.6 % ছোট
মিউজিক 22.05 kHz মনো 16-বিট 4,342,996 3,112,135 2,635,819 2,634,66915.3 % ছোট
মিউজিক 22.05 kHz মনো 8-বিট 2,171,520 844,160 742,462 740,75112.2 % ছোট
মিউজিক 48 kHz স্টেরিও 24-বিট 28,362,206 21,467,283 (-m3) 18,689,529 18,688,03012.9 % ছোট



সব আকার বাইটে। 24-বিট ফাইলের জন্য RAR শুধু -m3-তে মাপা হয়েছিল, তাই সেই সারিটি অন্যগুলোর চেয়ে দুর্বল তুলনা।

Figure 3: archive size as a percentage of the original data (lower is better).
চিত্র 3: মূল ডেটার শতাংশ হিসেবে আর্কাইভ আকার (কম ভালো)।
Figure 4: size reduction of nikpak compared with RAR 7.00 -m5.
চিত্র 4: RAR 7.00 -m5-এর তুলনায় nikpak-এর আকার হ্রাস।

মিডিয়া ফিল্টার কী যোগ করে

মিডিয়া ফিল্টার ছাড়া একই nikpak (ভার্সন 1.0, ডিফল্ট স্তরে প্লেইন Zstandard) মিডিয়া স্তরের মূল্যের জন্য সঠিক মাপকাঠি:

সেটnikpak 1.0 (কোনো ফিল্টার নেই)nikpak 1.1 -m2হ্রাস
6টি BMP ফটোগ্রাফ 3,580,971 2,035,223 43.2 %
16টি ProTracker MOD ফাইল 1,260,607 966,622 23.3 %
35টি গ্যালারি WAV (মনো 16-বিট) 1,876,722 1,529,219 18.5 %
মিউজিক 44.1 kHz স্টেরিও 16-বিট 15,585,422 9,415,519 39.6 %
মিউজিক 22.05 kHz মনো 16-বিট 3,887,183 2,635,819 32.2 %
মিউজিক 22.05 kHz মনো 8-বিট 1,078,493 742,462 31.2 %



FLAC-এর সাথে তুলনা

44.1 kHz স্টেরিও মিউজিকের জন্য 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) FLAC-এর 19.12 MB-এর চেয়ে ছোট। গ্যালারি ফাইলে FLAC অনেক দুর্বল (RAR-এর 1.61 MB-এর বিপরীতে 2.50 MB), যে কারণে তা অনুচ্ছেদ 7.5-এ ব্যাখ্যা করা হয়েছে; এই ক্ষেত্রেই অন্য ফিল্টারগুলো তাদের স্থান অর্জন করে।

11.3 সাধারণ ডেটা

সোর্স কোড ও ডকুমেন্ট মিডিয়া নয়, তাই এই টেস্ট পরীক্ষা করে যে nikpak-এর অন্যত্র লাভ সাধারণ ফাইলে কোনো ক্ষতি করে কি না।

টুল ও স্তরআকার (বাইট)সময়এক্সট্র্যাকশন
nikpak -m5 24,443,483 45.6 s 1.8 s
RAR 7 -m5 -s -md256m 25,862,475 36.2 s
RAR 7 -m5 -s 26,002,812 26.7 s
RAR 7 -m3 -s 26,536,863 16.7 s 1.5 s
nikpak -m4 26,814,023 13.5 s
nikpak -m3 30,329,965 2.0 s
nikpak -m2 (1.1 ডিফল্ট) 36,266,743 0.9 s 0.8 s
RAR 7 -m5 (ডিফল্ট, সলিড নয়) 50,851,230 14.8 s
RAR 7 -m3 (ডিফল্ট, সলিড নয়) 50,974,773 9.7 s 2.3 s



Figure 5: general data, size and creation time on one core.
চিত্র 5: সাধারণ ডেটা, এক কোরে আকার ও সৃষ্টি সময়।

টেবিলটি সৎভাবে পড়া:

  • সর্বোচ্চ স্তর: nikpak RAR-এর সেরা (24.4 বনাম 25.9 MB) থেকে 5.5 % ছোট একটি আর্কাইভ তৈরি করে। RAR এই স্তরে দ্রুত (45.6 s-এর বিপরীতে 26.7 থেকে 36.2 s)।
  • সমান আকার: nikpak -m4 RAR-এর ডিফল্ট সলিড স্তরের প্রায় 1 %-এর মধ্যে, 81 % সময়ে (16.7 s-এর বিপরীতে 13.5 s)।
  • দ্রুত স্তর: -m2 গতির জন্য অনুপাত বিনিময় করে: RAR সলিড -m3-এর চেয়ে 18 গুণ দ্রুত, এবং 37 % বড়। এটি ব্যাকআপ ও পাইপলাইনের জন্য স্তর, যেখানে শেষ কয়েক মেগাবাইটের চেয়ে সময় বেশি গুরুত্বপূর্ণ।
  • সলিড নয়: RAR-এর ডিফল্ট (নন-সলিড) আর্কাইভ এই অনেক-ছোট-ফাইল ডেটায় তার সলিডগুলোর প্রায় দ্বিগুণ আকার। যে কেউ nikpak-কে RAR-এর সাথে তুলনা করবে তার RAR-এ -s যোগ করা উচিত।

11.4 একটি একক বড় মিডিয়া ফাইলে গতি

Figure 6: creating an archive from the 17 MB stereo WAV.
চিত্র 6: 17 MB স্টেরিও WAV থেকে একটি আর্কাইভ তৈরি।
অপারেশনnikpakRAR 7আকার
সৃষ্টি, দ্রুত / RAR ডিফল্ট 1.45 s (-m2) 2.54 s (-m3)9,415,519 বনাম 11,128,595
সৃষ্টি, সর্বোচ্চ স্তর 3.14 s (-m5) 5.87 s (-m5)9,411,898 বনাম 11,024,411
এক্সট্র্যাক্ট 0.28 s 0.23 sএকই আউটপুট



মিডিয়াতে nikpak তৈরি করতে ছোট ও দ্রুত উভয়ই। RAR এক্সট্র্যাক্ট একটু দ্রুত করে; একটি সম্ভাব্য কারণ হলো NAC ডিকোডিং প্রতিটি স্যাম্পলের জন্য পূর্ণসংখ্যা প্রেডিকশন করে, যা সাধারণ ডিকোডিংকে প্রভাবিত করে এমন ম্যাচ কপির চেয়ে কিছুটা বেশি খরচ সাপেক্ষ।

11.5 এনক্রিপশন অতিরিক্ত খরচ

222 MB ডেটা সেটে, একটি এনক্রিপ্টেড আর্কাইভ 0.64 s-এর বিপরীতে 0.92 s নিয়েছে, এবং 11,087 বাইট (0.03 %) বড় ছিল। পার্থক্যটিতে Argon2id ডেরিভেশন অন্তর্ভুক্ত, তাই খরচটি একটি স্থির সেকেন্ড-ভগ্নাংশ দ্বারা প্রভাবিত।

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

nikpak 1.2.0-এর জন্য হালনাগাদ। এই রানের প্রথম ভার্সনে, nikpak 1.1.0-এর সাথে, 7-Zip -mx9 টেক্সটে (1.4 %), অফিস ফাইলে (3.3 %) ও সোর্স কোডে (8.5 %) এগিয়ে ছিল। nikpak 1.2.0 Deflate রিকম্প্রেশন (7.9) এবং LZMA2 ও PPMd (6.7)-এর উপর নির্মিত একটি নতুন সর্বোচ্চ স্তর যোগ করে, এবং একই মেশিনে একই ফাইল দিয়ে আবার মাপা হয়েছিল। RAR, 7-Zip ও ZIP-এর পরিসংখ্যান প্রথম রান থেকে আসে।

অনুচ্ছেদ 11.2 থেকে 11.5 nikpak-কে শুধু RAR-এর সাথে তুলনা করে। এই দ্বিতীয় রানে যোগ হয়েছে সেই দুটি আর্কাইভার যা বেশিরভাগ মানুষের ইতিমধ্যে আছে, 7-Zip ও ক্লাসিক ZIP ফরম্যাট, এবং প্রতিদিন আর্কাইভ করা দুই ধরনের ফাইল: প্লেইন টেক্সট ও অফিস ডকুমেন্ট (.doc, .docx, .xls, .xlsx, .csv, .pdf)। চারটি টুলই একই মেশিনে ও একই ফাইলে একটির পর একটি চালানো হয়েছিল, এবং RAR আবার মাপা হয়েছিল। কর্পোরা একই পাবলিক উৎস থেকে পুনর্নির্মিত, তাই অ্যাবসোলিউট আকার ও সময় 11.2 থেকে 11.4-এর থেকে ভিন্ন। সংখ্যা এই অনুচ্ছেদের ভেতরে তুলনা করুন, অনুচ্ছেদ জুড়ে নয়।

পদ্ধতি

আইটেমবিবরণ
মেশিনLinux x86-64 ভার্চুয়াল মেশিন (Intel Xeon, 2.8 GHz)। প্রতিটি কমান্ড taskset দিয়ে একটি CPU কোরে পিন করা এবং একক-থ্রেডে চালানো হয়েছিল (nikpak -mt1, RAR -mt1, 7-Zip -mmt=1; ZIP নকশা অনুযায়ী একক-থ্রেডেড)।
সফটওয়্যারnikpak 1.2.0 (release বিল্ড); RAR 7.00 (-ma5, সলিড); 7-Zip 23.01 (.7z ফরম্যাট, LZMA2, ডিফল্টে সলিড); Info-ZIP Zip 3.0 ও UnZip 6.0 (Deflate)।
স্তরnikpak: দ্রুত স্তর -m2 ও সর্বোচ্চ -m5, যা 1.2.1 থেকে ডিফল্ট (এবং -m4)। অন্যান্য: ডিফল্ট ও সর্বোচ্চ, RAR -m3 -s / -m5 -s, 7-Zip -mx5 / -mx9, ZIP -6 / -9। RAR-কে সলিড মোড (-s) দেওয়া হয়েছিল, কারণ অন্য তিনটি সলিড বা, ZIP-এর ক্ষেত্রে, হতে পারে না।
সময় মাপাওয়াল-ক্লক সেকেন্ড। 50 MB-এর নিচের সেট: তিন রানের সেরা। সাধারণ সেট: এক রান।
যাচাইসব 92টি আর্কাইভ এক্সট্র্যাক্ট করে diff -r দিয়ে মূলের সাথে তুলনা করা হয়েছিল। সব অভিন্ন ছিল।



টেস্ট উপাদান

সেটফাইলআকার (বাইট)কনটেন্ট
BMP ছবি 8 6,987,840scikit-image স্যাম্পল সেট থেকে ছয়টি ফটোগ্রাফ 24-বিট BMP হিসেবে, সাথে একটি 8-বিট গ্রেস্কেল ফটোগ্রাফ ও একটি 8-বিট নুড়ি টেক্সচার।
ProTracker MOD 16 2,252,604libxmp টেস্ট সংগ্রহে 16টি সবচেয়ে বড় ProTracker মডিউল।
গ্যালারি WAV 35 2,991,82011.1-এর মতোই একই 35টি LibreOffice গ্যালারি সাউন্ড।
মিউজিক, চারটি ফরম্যাট 4 × 1 53,417,226একটি নতুন 100-সেকেন্ডের টুকরা (পিয়ানো, স্ট্রিং, বেস, বাঁশি, ড্রাম) TiMidity++ ও Freepats দিয়ে 44.1 kHz স্টেরিও 16-বিটে রেন্ডার করা, তারপর SoX দিয়ে 22.05 kHz মনো 16-বিট ও 8-বিট এবং 48 kHz স্টেরিও 24-বিটে রূপান্তরিত।
প্লেইন টেক্সট 18 11,793,318আঠারোটি Project Gutenberg বই .txt হিসেবে (Austen, Melville, Shakespeare, King James Bible ও অন্যান্য)।
অফিস ফাইল 60 39,100,91512টি রিপোর্ট .docx, .doc ও .pdf হিসেবে (টেক্সট, শিরোনাম, টেবিল ও কিছু ছবি) এবং 500 থেকে 30,000 সারির 8টি বিক্রয় ওয়ার্কবুক .xlsx, .xls ও .csv হিসেবে (ফর্মুলাসহ), LibreOffice দিয়ে সংরক্ষিত।
সাধারণ ডেটা 11,473 190,454,632Python 3.12 ও 3.13 স্ট্যান্ডার্ড লাইব্রেরি, Debian Python প্যাকেজ, C হেডার (/usr/include) ও /usr/share/doc। সিম্বলিক লিংক সরানো।



সর্বোচ্চ স্তর: আর্কাইভ আকার

সেটমূলnikpak -m5RAR 7 -m57-Zip -mx9ZIP -9
8টি BMP ছবি 6,987,840 3,557,350 4,394,310 4,195,043 4,974,680
16টি ProTracker MOD ফাইল 2,252,604 1,127,607 1,264,245 1,166,855 1,408,085
35টি গ্যালারি WAV (মনো 16-বিট) 2,991,820 1,346,484 1,596,971 1,484,879 1,852,279
মিউজিক 44.1 kHz স্টেরিও 16-বিট 17,760,408 8,731,989 10,460,042 10,666,922 15,225,764
মিউজিক 22.05 kHz মনো 16-বিট 4,440,136 2,458,867 2,797,026 2,784,080 3,736,722
মিউজিক 22.05 kHz মনো 8-বিট 2,220,090 606,840 725,416 642,341 836,989
মিউজিক 48 kHz স্টেরিও 24-বিট 28,996,592 18,198,056 21,229,465 25,542,036 26,980,770
18টি প্লেইন-টেক্সট বই (.txt) 11,793,318 2,741,898 3,519,622 3,259,868 4,223,579
60টি অফিস ফাইল 39,100,915 6,887,729 11,186,217 10,085,779 17,399,998
সাধারণ ডেটা (11,473 ফাইল) 190,454,632 28,175,618 33,606,893 28,879,398 62,198,510



সব আকার বাইটে। প্রতিটি সারিতে সবচেয়ে ছোট আর্কাইভটি বোল্ডে দেখানো হয়েছে।

Figure 7: archive size at the maximum level of each tool, as a percentage of the original (lower is better).
চিত্র 7: প্রতিটি টুলের সর্বোচ্চ স্তরে আর্কাইভ আকার, মূলের শতাংশ হিসেবে (কম ভালো)।

দ্রুত স্তর: আকার ও সৃষ্টি সময়

সেটnikpak -m2RAR 7 -m37-Zip -mx5ZIP -6
8টি BMP ছবি 54.0 % · 0.39 s 63.0 % · 2.09 s 60.1 % · 3.51 s 71.2 % · 0.35 s
16টি ProTracker MOD ফাইল 52.4 % · 0.61 s 56.2 % · 0.43 s 51.9 % · 0.69 s 62.7 % · 0.10 s
35টি গ্যালারি WAV (মনো 16-বিট) 51.1 % · 0.41 s 53.6 % · 0.71 s 49.6 % · 1.96 s 61.9 % · 0.24 s
মিউজিক 44.1 kHz স্টেরিও 16-বিট 49.2 % · 1.72 s 59.9 % · 3.60 s 60.1 % · 14.03 s 85.7 % · 0.82 s
মিউজিক 22.05 kHz মনো 16-বিট 55.4 % · 0.58 s 64.1 % · 0.95 s 62.7 % · 2.14 s 84.2 % · 0.22 s
মিউজিক 22.05 kHz মনো 8-বিট 27.4 % · 0.77 s 33.3 % · 0.52 s 28.9 % · 2.13 s 38.2 % · 0.32 s
মিউজিক 48 kHz স্টেরিও 24-বিট 62.8 % · 2.06 s 73.6 % · 7.54 s 88.1 % · 13.54 s 93.0 % · 1.19 s
18টি প্লেইন-টেক্সট বই (.txt) 35.2 % · 0.11 s 30.4 % · 5.53 s 27.7 % · 11.76 s 36.0 % · 0.89 s
60টি অফিস ফাইল 38.0 % · 0.22 s 29.5 % · 8.25 s 26.2 % · 21.85 s 44.7 % · 1.83 s
সাধারণ ডেটা (11,473 ফাইল) 25.3 % · 1.67 s 18.0 % · 48.19 s 17.0 % · 93.71 s 32.9 % · 7.32 s



অন্য টুলগুলোর ডিফল্ট স্তরের বিরুদ্ধে nikpak -m2। প্রতিটি ঘর মূলের শতাংশ হিসেবে আর্কাইভ আকার ও এক কোরে সৃষ্টি সময় দেখায়। প্রতিটি সারিতে সবচেয়ে ছোট আর্কাইভটি বোল্ডে।

সাধারণ ডেটা বিস্তারিত

টুল ও স্তরআকার (বাইট)মূলের %সৃষ্টিএক্সট্র্যাকশন
nikpak -m5 28,175,618 14.8 % 154.3 s 5.6 s
7-Zip -mx9 28,879,398 15.2 % 120.9 s 6.0 s
RAR 7 -m5 -s -md256m 32,350,575 17.0 % 73.6 s 7.0 s
7-Zip -mx5 32,375,802 17.0 % 93.7 s 4.5 s
nikpak -m4 33,295,133 17.5 % 37.8 s 3.3 s
RAR 7 -m5 -s 33,606,893 17.6 % 72.4 s 6.7 s
RAR 7 -m3 -s 34,236,198 18.0 % 48.2 s 5.9 s
nikpak -m2 48,229,284 25.3 % 1.7 s 0.9 s
RAR 7 -m3 (সলিড নয়) 56,038,351 29.4 % 20.2 s 6.9 s
ZIP -9 62,198,510 32.7 % 28.2 s 6.9 s
ZIP -6 62,672,415 32.9 % 7.3 s 5.4 s



Figure 8: general data, size and creation time of all four tools on one core.
চিত্র 8: সাধারণ ডেটা, এক কোরে চারটি টুলের আকার ও সৃষ্টি সময়।

1.1.0 থেকে 1.2.0

সেটnikpak 1.1.0 -m5nikpak 1.2.0 -m57-Zip -mx91.2.0 বনাম 7-Zip
18টি প্লেইন-টেক্সট বই 3,306,819 2,741,898 3,259,86815.9 % ছোট
60টি অফিস ফাইল 10,417,750 6,887,729 10,085,77931.7 % ছোট
সাধারণ ডেটা 31,322,041 28,175,618 28,879,3982.4 % ছোট



ফলাফল সৎভাবে পড়া

  • 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 %।
  • অফিস ফাইল: 7-Zip-এর চেয়ে 31.7 % ছোট। Deflate রিকম্প্রেশন 6.6 MB .xlsx ও 1.9 MB .docx-কে প্লেইন XML-এ রূপান্তর করে যা LZMA2 Deflate-এর চেয়ে অনেক ভালো কমপ্রেস করে (10.09 MB-এর বিপরীতে 6.89 MB)। এমনকি -m4 7-Zip -mx9-এর চেয়ে 1.3 % ছোট ও দ্রুত (26 s-এর বিপরীতে 16 s)। -m5-এ মূল্য হলো সময়: 26 s-এর বিপরীতে 81 s।
  • টেক্সট: 15.9 % ছোট, অর্ধেক সময়ে। গদ্যে PPMd জেতে (তৈরি করতে 12.9 s-এর বিপরীতে 6.4 s)। PPMd যত ধীরে এনকোড করে ততই ধীরে ডিকোড করায়, এক্সট্র্যাকশনে 0.2 s-এর বদলে 2.7 s লাগে।
  • সোর্স কোড: 2.4 % ছোট, একটি সরু এগিয়ে থাকা। 28.9 MB-এর বিপরীতে 28.2 MB, 121 s-এর বিপরীতে 154 s-এ। ফাইল টাইপ অনুযায়ী সাজানো ও সংলগ্ন নমুনায় ইঞ্জিন বেছে নেওয়া (6.7) পার্থক্য গড়েছে।
  • দ্রুত স্তর -m2: দ্রুততম, ছোটতম নয়। nikpak -m2 সাধারণ সেটে 1.7 s নেয়, 7-Zip -mx5-এর 93.7 s (56 গুণ দীর্ঘ), RAR-এর 48.2 s ও ZIP-এর 7.3 s-এর বিপরীতে। এটি ছবিতে ও বেশিরভাগ অডিওতে 7-Zip -mx5-এর চেয়ে ছোট (MOD ফাইল ও গ্যালারি WAV 1 থেকে 3 % বড়), কিন্তু টেক্সট, অফিস ফাইল ও সোর্স কোডে বড় (সাধারণ সেটে 49.0 %)। এ কারণে, ভার্সন 1.2.1 থেকে nikpak ডিফল্টে -m5 ব্যবহার করে; -m2 চেয়ে নিতে হয়।
  • ZIP দ্রুত কিন্তু সর্বত্র সবচেয়ে বড়। এমনকি nikpak -m2 প্রতিটি সেটে ZIP -9-কে হারায়। ZIP ছোট মিডিয়া আর্কাইভ nikpak -m2-এর চেয়ে দ্রুত তৈরি করে, কারণ Deflate NAC কোডেকের চেয়ে অনেক কম কাজ করে, কিন্তু এটি টেক্সট, অফিস ফাইল ও সোর্স কোডে ধীর।
  • এক্সট্র্যাকশন। সাধারণ সেট এক্সট্র্যাক্ট হয় 0.9 s (nikpak -m2) বা 5.6 s (-m5)-এ, 7-Zip-এর 6.0 s, RAR-এর 6.7 s ও ZIP-এর 6.9 s-এর বিপরীতে। রিকম্প্রেস করা Deflate স্ট্রিমসহ আর্কাইভ আরও ধীরে এক্সট্র্যাক্ট হয়, কারণ প্রতিটি স্ট্রিম পুনর্নির্মিত হয় (অফিস সেটে 0.7 s-এর বিপরীতে 2.1 s)।
  • এই মেশিনে RAR। RAR এখানে 11.3-এর চেয়ে ধীর ছিল (একই পরিমাণ সোর্স কোডে -m5 -s-এর জন্য 27 s-এর বদলে 72 s)। মেশিন ও ডেটা ভিন্ন, তাই দুটি অনুচ্ছেদ মেশানো উচিত নয়। এই রানের ভেতরে প্রতিটি টুল একই শর্ত পূরণ করেছে।

nikpak-এর জন্য এর অর্থ কী

সর্বোচ্চ স্তরে nikpak 1.2.0 মাপা প্রতিটি সেটে চারটি টুলের মধ্যে সবচেয়ে ছোট আর্কাইভ তৈরি করে, 7-Zip -mx9-এর চেয়ে 2.4 থেকে 31.7 % ছোট। খরচ হলো গতি: -m5 একক-থ্রেডেড এবং অফিস ফাইল ও সোর্স কোডে 7-Zip-এর চেয়ে ধীর। একে দ্রুত করা রোডম্যাপে আছে (অনুচ্ছেদ 15.2)।

12 nikpak এবং RAR-এর তুলনা

RAR একটি চমৎকার ও ব্যাপকভাবে ব্যবহৃত আর্কাইভার, এবং এই অধ্যায়টি অন্য কিছু ভান করে না। এটি তুলে ধরে কোথায় পরিমাপ ও নকশা nikpak-এর পক্ষে, কোথায় RAR এগিয়ে, এবং কে কোনটি বেছে নেবে।

12.1 যেখানে nikpak এগিয়ে

ক্ষেত্রnikpakপ্রমাণ
অডিও, ছবি, ট্র্যাকার মিউজিকমাপা প্রতিটি মিডিয়া সেটে RAR 7 -m5-এর চেয়ে 12 - 39 % ছোটঅনুচ্ছেদ 11.2
সোর্স কোড, সর্বোচ্চ স্তরRAR-এর সেরা সলিড সেটিংয়ের চেয়ে 5.5 % ছোটঅনুচ্ছেদ 11.3
দ্রুত স্তর -m2-তে গতি197 MB-এর জন্য 9.7 - 16.7 s-এর বিপরীতে 0.9 s; একটি WAV-এর জন্য 2.54 s-এর বিপরীতে 1.45 sঅনুচ্ছেদ 11.3, 11.4
সাইফার ও মোডXChaCha20-Poly1305, অথেন্টিকেটেড; RAR5 CBC মোডে AES-256 ব্যবহার করে, যা অথেন্টিকেটেড নয় এবং পৃথক চেকসামের উপর নির্ভর করে8 অধ্যায়
পাসওয়ার্ড হ্যাশিংArgon2id, মেমরি-হার্ড (64 MiB); RAR5 PBKDF2-HMAC-SHA256 ব্যবহার করে, যা CPU-বাউন্ড এবং GPU-তে সস্তায় সমান্তরাল হয়অনুচ্ছেদ 8.2
ফাইল-নাম গোপনীয়তাসবসময় এনক্রিপ্টেড; RAR-এর -hp সুইচ লাগেঅনুচ্ছেদ 8.4
পাসওয়ার্ড জেনারেশনবিল্ট-ইন: কিছু না দেওয়া হলে শক্তিশালী র্যান্ডম পাসওয়ার্ডঅনুচ্ছেদ 3.3
বিকৃতির প্রমাণপুনর্বিন্যাস, কাটা ও হেডার পরিবর্তন ক্রিপ্টোগ্রাফিকভাবে শনাক্ত হয়অনুচ্ছেদ 8.6
স্বচ্ছতাসম্পূর্ণ সোর্স ও নথিভুক্ত ফরম্যাট; মেমরি-নিরাপদ Rust-এ ইমপ্লিমেন্টেশন5, 10 অধ্যায়
বিতরণএকটি স্ট্যাটিক এক্সিকিউটেবল (ড্রপ উইন্ডো ও কমান্ড লাইন; উইন্ডো ছাড়া প্রায় 2.3 MB), বা একটি ছোট Windows ইনস্টলার; শেয়ারওয়্যার, ব্যক্তিগত ব্যবহারের জন্য বিনামূল্যে (3.8)13 অধ্যায়



12.2 যেখানে RAR এগিয়ে

ক্ষেত্রRAR 7আজকের nikpak
রিকভারি রেকর্ডক্ষতিগ্রস্ত আর্কাইভ মেরামত করতে পারেক্ষতি শনাক্ত করে, মেরামত করতে পারে না
মাল্টি-ভলিউম আর্কাইভহ্যাঁনা
স্ব-নিষ্কাশনকারী আর্কাইভহ্যাঁনা
একটি আর্কাইভ আপডেট করাইন-প্লেস ফাইল যোগ, প্রতিস্থাপন ও মুছে ফেলাশুধু তৈরি বা ওভাররাইট
গ্রাফিক্যাল ইন্টারফেসWinRAR, শেল ইন্টিগ্রেশনসহকমপ্রেসের জন্য ড্রপ উইন্ডো (3.7); কোনো শেল ইন্টিগ্রেশন নেই, কমান্ড লাইন থেকে এক্সট্র্যাকশন
সর্বোচ্চ-স্তরের গতিসাধারণ সেটে 26.7 - 36.2 s 45.6 s
মিডিয়াতে এক্সট্র্যাকশন গতি17 MB WAV-এর জন্য 0.23 s 0.28 s
পরিপক্বতা ও বিস্তৃতিদশকের পর দশকের ফিল্ড টেস্টিং; লক্ষ লক্ষ বিদ্যমান .rar ফাইলনতুন; কোনো স্বাধীন অডিট নেই; শুধু .nik পড়ে



12.3 দৃষ্টিকোণে কোয়ান্টাম প্রতিরোধ

nikpak ও RAR5 উভয়ই একটি 256-বিট সিমেট্রিক কী দিয়ে এনক্রিপ্ট করে, তাই উভয়ই Shor-এর অ্যালগরিদম দ্বারা অস্পৃশ্য এবং উভয়ই Grover-এর বিরুদ্ধে প্রায় 128 বিট নিরাপত্তা ধরে রাখে। কোনো দাবিই তাদের আলাদা করে না। nikpak এর উপরে যা যোগ করে তা হলো একটি মেমরি-হার্ড পাসওয়ার্ড ধাপ (যা প্রভাবশালী বাস্তব-বিশ্বের আক্রমণ, পাসওয়ার্ড অনুমান, অনেক বেশি ব্যয়বহুল করে) এবং অথেন্টিকেটেড এনক্রিপশন (যা বিকৃতি শনাক্তযোগ্য করে)। এটি শুরু থেকেই এই ধারণায় নকশা করা হয়েছে যে কোনো পাবলিক-কী প্রিমিটিভ কখনো আর্কাইভ ফরম্যাটের অংশ হবে না, এবং এর রোডম্যাপ পাবলিক-কী শেয়ারিং যোগ করা হলে একটি হাইব্রিড পোস্ট-কোয়ান্টাম স্কিমে অঙ্গীকারবদ্ধ।

12.4 কোনটি বেছে নেবেন

  • nikpak বেছে নিন অডিও, ছবি, ট্র্যাকার মিউজিক ও সোর্স কোডের আর্কাইভের জন্য যেখানে আকার ও গতি গুরুত্বপূর্ণ, স্ক্রিপ্ট করা ব্যাকআপের জন্য, শক্তিশালী ডিফল্ট এনক্রিপশনের জন্য, এবং যখন একটি উন্মুক্ত, নথিভুক্ত ফরম্যাট মূল্যবান।
  • RAR বেছে নিন যখন আপনার রিকভারি রেকর্ড, মাল্টি-ভলিউম বা স্ব-নিষ্কাশনকারী আর্কাইভ, ইন-প্লেস আপডেট দরকার, বা শুধু RAR টুল আছে এমন লোকদের সাথে আর্কাইভ বিনিময় করতে হবে।
  • দুটিই ব্যবহার করুন: একটি ওয়ার্কফ্লো বাল্ক মিডিয়া ও এনক্রিপ্টেড ব্যাকআপের জন্য nikpak ব্যবহার করতে এবং বিতরণের জন্য RAR রাখতে কিছুই বাধা দেয় না।

12.5 আর 7-Zip ও ZIP?

অনুচ্ছেদ 11.7 nikpak 1.2-কে 7-Zip 23.01 ও Info-ZIP 3.0-এর বিরুদ্ধেও মাপে। সংক্ষেপে:

  • সবচেয়ে ছোট আর্কাইভের জন্য nikpak -m5 বেছে নিন। এটি মাপা প্রতিটি সেটে 7-Zip -mx9-এর চেয়ে 2.4 থেকে 31.7 % ছোট: অফিস ফাইলে 31.7 %, টেক্সটে 15.9 % ও সোর্স কোডে 2.4 %। দ্রুত ব্যাকআপের জন্য nikpak -m2 বেছে নিন (সোর্স কোডে 7-Zip-এর ডিফল্টের চেয়ে 56 গুণ দ্রুত)। nikpak-এর এনক্রিপশনও শক্তিশালী: 7-Zip AES-256 ব্যবহার করে একটি SHA-256 কী ডেরিভেশনসহ যা মেমরি-হার্ড নয়, এবং এটি শুধু -mhe দিয়ে ফাইলের নাম লুকায়।
  • 7-Zip বেছে নিন যখন সর্বোচ্চ স্তরে সময় বেশি গুরুত্বপূর্ণ (এটি বড় অফিস ও সোর্স-কোড সেটে দ্রুত), যখন আপনার এর ডিফল্ট স্তর ডকুমেন্টে ছোট হওয়া দরকার, বা যখন 7-Zip পড়ে এমন বহু ফরম্যাট খুলতে হবে।
  • শুধু সামঞ্জস্যের জন্য ZIP বেছে নিন। প্রতিটি অপারেটিং সিস্টেম অতিরিক্ত সফটওয়্যার ছাড়াই এটি খোলে, কিন্তু nikpak -m5 19.9 থেকে 60.4 % ছোট, এবং ZIP-এর ঐতিহ্যবাহী এনক্রিপশন দুর্বল।

13 বিল্ডিং, ডিপ্লয়মেন্ট ও সংযুক্তি

13.1 PowerShell-এ Windows

nikpak Rust-এ লেখা এবং Cargo দিয়ে বিল্ট হয়। Windows-এ, Rust-এর একটি C/C++ লিংকার লাগে, যা Visual Studio Build Tools থেকে আসে। একটি অ্যাডমিনিস্ট্রেটর PowerShell-এ, দুটিই একবার ইনস্টল করুন এবং তারপর PowerShell আবার খুলুন:

winget install Rustlang.Rustup
$o = '--wait --passive --add Microsoft.VisualStudio.Workload.VCTools'
$o += ' --includeRecommended'
winget install Microsoft.VisualStudio.2022.BuildTools --override $o



winget না থাকলে, rustup.rs থেকে Rust এবং Desktop development with C++ ওয়ার্কলোডসহ Build Tools for Visual Studio ইনস্টল করুন। তারপর, যে ফোল্ডারে সোর্সগুলো আছে:

.\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 থেকে নেওয়া হয়। এই সেটআপ ফাইলটিই শেয়ারওয়্যার ও ডাউনলোড সাইটে আপলোড করা হয়।

  • ডিফল্টে এটি শুধু বর্তমান ব্যবহারকারীর জন্য ইনস্টল করে, অ্যাডমিনিস্ট্রেটর অধিকার বা UAC প্রম্পট ছাড়া, %LOCALAPPDATA%\Programs\NikPak-এ। এর প্রথম পেজে "সব ব্যবহারকারীর জন্য ইনস্টল" বিকল্প থাকে (Program Files, অ্যাডমিনিস্ট্রেটর অধিকার লাগে)।
  • এটি গ্রহণের জন্য LICENSE.txt দেখায় এবং nikpak.exe, unNik.exe, আইকন, LICENSE.txt, THIRD-PARTY-NOTICES.txt ও CHANGELOG.md ইনস্টল করে। এটি একটি Start মেনু এন্ট্রি, একটি ঐচ্ছিক ডেস্কটপ আইকন এবং, চাইলে, কমান্ড লাইনের জন্য ফোল্ডারটিকে PATH-এ যোগ করে। এটি সেটিংস > অ্যাপস-এ একটি আনইনস্টলার রেজিস্টার করে।
  • শর্টকাট: Start মেনুতে NikPak, unNik ও লাইসেন্স; ডেস্কটপে NikPak (সবসময়) এবং বিকল্প হিসেবে ডেস্কটপে unNik।
  • .nik ফাইল সবসময় রেজিস্টার হয় (1.5.2 থেকে): এগুলো তাদের নিজস্ব আইকন পায় (nikfile.ico, একটি জিপারসহ পেজ, .zip ফাইলের মতো), টাইপ নাম "NikPak archive", এবং একটি ডাবল-ক্লিক সেগুলো unNik-এ খোলে (রাইট-ক্লিক মেনুতে "unNik দিয়ে খুলুন")। unNik "যা দিয়ে খুলবেন"-এ ও ডিফল্ট অ্যাপ-এও তালিকাভুক্ত। আনইনস্টলার রেজিস্ট্রেশনটি সরিয়ে দেয়। .nik ফাইল ইতিমধ্যে অন্য প্রোগ্রাম দিয়ে খোলার জন্য সেট থাকলে, "যা দিয়ে খুলবেন"-এ একবার unNik বেছে নেওয়ার আগে Windows সেই পছন্দ ধরে রাখে।
  • শেষ "NikPak চালু করুন" NikPak-কে সাধারণ ব্যবহারকারী হিসেবে চালু করে, কখনো অ্যাডমিনিস্ট্রেটর হিসেবে নয়, যাতে ড্র্যাগ অ্যান্ড ড্রপ কাজ করে। আপডেট আগের ভার্সনের উপর ইনস্টল হয় (স্থির AppId)। %APPDATA%\nikpak-এর লাইসেন্স আপডেট ও আনইনস্টলে রাখা হয়। সেটআপে কখনো কী বা কী ফাইল থাকে না।
  • ইনস্টলারটি Windows অনুসরণ করে English বা ফরাসিতে চলে। প্রকাশের আগে, একটি কোড-সাইনিং সার্টিফিকেট দিয়ে nikpak.exe ও সেটআপে স্বাক্ষর করুন, যাতে Windows SmartScreen অজানা প্রকাশক সম্পর্কে সতর্ক না করে।

buildall.ps1 এক রানে প্রকাশিত সবকিছু বিল্ড করে — nikpak.exe, unNik.exe, দুটি সেটআপ ও SHA256SUMS.txt — সেগুলো binaries\-এ কপি করে, ওয়েব সাইটটি পুনর্নির্মাণ করে এবং FTP দিয়ে আপলোড করে (-NoUpload আপলোড বাদ দেয়)। দ্বিতীয় সেটআপ, unnik--setup.exe (installer\unnik.iss), একা unNik ইনস্টল করে, বিনামূল্যের আর্কাইভ ব্রাউজার; NikPak ইতিমধ্যে ইনস্টল থাকলে এটি শুধু প্রোগ্রামটি ইনস্টল করে, তাই মেনুগুলো কখনো দ্বিগুণ হয় না।

13.2 npm দিয়ে বিল্ডিং

Rust প্রকল্প npm ব্যবহার করে না, তাই 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 Windows MSVC টার্গেটের জন্য C রানটাইম স্ট্যাটিকভাবে লিংক করে। ফলে 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/



macOS-এ আগে কমান্ড-লাইন টুল ইনস্টল করুন (xcode-select --install); Debian বা Ubuntu-তে একটি C কম্পাইলার ইনস্টল করুন (sudo apt install build-essential)। Rust নিজেই আসে curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh থেকে। কম্প্রেশন লাইব্রেরিটি Cargo তার C সোর্স থেকে কম্পাইল করে, তাই কোনো সিস্টেম লাইব্রেরির প্রয়োজন নেই।

সাইটের macOS ও Linux ডাউনলোড তৈরি করে ./package-unix.sh, যা nikpak ও unNik বিল্ড করে এবং একটি install.sh-এর সাথে সেগুলো প্যাক করে binaries\nikpak--macos.zip (একটি ইউনিভার্সাল বাইনারি: Intel + Apple silicon) বা binaries\nikpak--linux-.tar.gz-এ। পুরনো ডিস্ট্রিবিউশনেও প্রোগ্রাম চালানোর জন্য glibc 2.28-এর বিরুদ্ধে cargo-zigbuild দিয়ে বিল্ড করতে Linux-এ ZIG=1 সেট করুন।

13.5 নির্ভরতা

ভার্সন 1.2 থেকে nikpak-এর Rust 1.89 বা নতুন লাগে। build.ps1 ও build.sh ইনস্টল করা ভার্সন পরীক্ষা করে এবং পুরনো হলে rustup update stable চালায়। npm-এর সাথে, npm run build-এর আগে একবার rustup update চালান।

nikpak পরিণত ক্রেটের একটি ছোট সেটের উপর নির্ভর করে। তাদের হুবহু ভার্সন Cargo.lock-এ স্থির করা, যা সোর্স প্যাকেজের অংশ, তাই প্রতিটি বিল্ড একই কোড ব্যবহার করে।

ক্রেটউদ্দেশ্য
zstdZstandard কম্প্রেশন, মাল্টি-থ্রেডিংসহ
chacha20poly1305XChaCha20-Poly1305 ও STREAM নির্মাণ (RustCrypto)
argon2Argon2id কী ডেরিভেশন (RustCrypto)
randঅপারেটিং সিস্টেমের নিরাপদ র্যান্ডম জেনারেটরে অ্যাক্সেস
zeroizeমেমরি থেকে কী ও পাসওয়ার্ড মুছে ফেলা
rpasswordপ্রতিটি প্ল্যাটফর্মে প্রতিধ্বনি ছাড়া পাসওয়ার্ড পড়া
crc32fastদ্রুত CRC32
globওয়াইল্ডকার্ড সম্প্রসারণ (PowerShell নেটিভ প্রোগ্রামের জন্য ওয়াইল্ডকার্ড সম্প্রসারণ করে না)
liblzma-m5-এর জন্য LZMA2 ইঞ্জিন (liblzma, C সোর্স থেকে স্ট্যাটিকভাবে কম্পাইল করা)
ppmd-rust-m5-এ টেক্সটের জন্য PPMd ভ্যারিয়েন্ট I ইঞ্জিন
preflate-rsবিট-সঠিক Deflate রিকম্প্রেশন (Microsoft, Apache-2.0); vendor/preflate-rs-এ একটি ভেন্ডর করা কপি যার LGPL এনট্রপি কোডার (cabac) nikpak-এর নিজস্ব রেঞ্জ কোডার দিয়ে প্রতিস্থাপিত, তাই nikpak-এ কোনো LGPL কোড নেই। Rust 1.89 বা নতুন লাগে
eframe / eguiগ্রাফিক্যাল ইন্টারফেস (ঐচ্ছিক cargo feature gui, ডিফল্টে চালু)
rfdBrowse-এর জন্য নেটিভ ফোল্ডার ডায়ালগ
ed25519-dalekলাইসেন্স কী স্বাক্ষর যাচাই (অনুচ্ছেদ 3.8)
rustybuzz, unicode-bidiউইন্ডোতে হিন্দি, বাংলা ও আরবির শেপিং ও ডান-থেকে-বাম ক্রম (ঐচ্ছিক cargo feature gui)



13.6 স্ক্রিপ্টিং

অনুমানযোগ্য এক্সিট কোড ও এনভায়রনমেন্ট-ভেরিয়েবল পাসওয়ার্ড nikpak-কে স্ক্রিপ্ট করা সহজ করে। একটি PowerShell ব্যাকআপ যা সতর্কতাকে গ্রহণযোগ্য এবং তার চেয়ে খারাপ কিছুকে ব্যর্থতা হিসেবে গণ্য করে:

$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" }



একটি শেল স্ক্রিপ্টে একই জিনিস, অন্য টুলে খাওয়ানোর জন্য bare list কমান্ড ব্যবহার করে:

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

অনুচ্ছেদ 3.6-এ বর্ণিত সংযুক্তি nikpak RAR-এর সিনট্যাক্স অনুসরণ করার উপর নির্ভর করে। একটি ছোট চেকলিস্ট: nik এক্সটেনশন রেজিস্টার করুন; প্যাকিংয়ের জন্য a ও আনপ্যাকিংয়ের জন্য x ব্যবহার করুন; দীর্ঘ ফাইল তালিকার জন্য ফ্রন্ট-এন্ডকে @listfile দিতে দিন; অটেন্ডেড এক্সট্র্যাকশনের জন্য -o+ বা -y দিন; এবং পাসওয়ার্ড দিন -p বা NIKPAK_PASSWORD ভেরিয়েবল দিয়ে, যেহেতু একটি গ্রাফিক্যাল ফ্রন্ট-এন্ডের প্রম্পট করার জন্য কোনো কনসোল নেই।

14 টেস্টিং ও যাচাই

একটি আর্কাইভার মানুষের ডেটা ধারণ করে বলে, nikpak চারটি স্তরে পরীক্ষিত হয়।

14.1 ইউনিট টেস্ট

চৌত্রিশটি স্বয়ংক্রিয় টেস্ট চলে cargo test --release দিয়ে:

ক্ষেত্রকী পরীক্ষা করা হয়
এনক্রিপশন স্ট্রিম0, 1, 100, 65,535, 65,536, 65,537, 131,072, 131,077 ও 327,803 বাইটে রাউন্ড ট্রিপ (64 KiB চাংক সীমানার চারপাশে); একটি ভুল হেডার (অ্যাসোসিয়েটেড ডেটা), একটি ভুল কী ও কাটা সব ব্যর্থ হতে হবে।
কী-ডেরিভেশন সীমাশত্রুভাবাপন্ন Argon2id প্যারামিটার (বিশাল মেমরি, শূন্য পাস, শূন্য লেন, অতিরিক্ত পাস) প্রত্যাখ্যাত হয়।
NAC অডিও কোডেক8/16/24/32-বিট অডিও, 1, 2, 3 ও 6 চ্যানেল, নয়টি সিগন্যাল টাইপ (নীরবতা, নয়েজি সাইন, সাদা নয়েজ, ফুল-স্কেল স্কয়ার ওয়েভ, র্যাম্প, একক ইমপালস, ধ্রুবক সর্বোচ্চ, নষ্ট নিচু বিট, ধ্রুবক সর্বনিম্ন), 1 থেকে 5000 স্যাম্পলের আটটি ব্লক দৈর্ঘ্য, তিনটি ইফোর্ট স্তর ও জোর করা verbatim কোডিংয়ের জন্য লসলেস রাউন্ড ট্রিপ।
অডিও পদ্ধতিসব বিট গভীরতা, চ্যানেল সংখ্যা, বাইট ক্রম ও সাইনডনেস জুড়ে NAC, Shuffle ও Shuffle+Delta, এমন ব্লকসহ যা সমানভাবে ভাগ হয় না।
শনাক্তকরণ ও ফাইলWAV (মনো, স্টেরিও, 8/16/24/32-বিট, এক্সটেনসিবল, ছয় চ্যানেল, ট্রেইলিং চাংক, বিজোড় অবশিষ্ট বাইট, শূন্য ও অতিরিক্ত বড় ডেটা দৈর্ঘ্য), AIFF, MOD (কাটাও) ও BMP (8/24/32-বিট, সারি প্যাডিং, ট্রেইলিং ডেটা); ফ্লোটিং-পয়েন্ট WAV, ক্ষুদ্র ফাইল ও টেক্সট শনাক্ত করা উচিত নয়; প্রতিটি ফাইল প্রতিটি প্রযোজ্য ফিল্টারের মধ্য দিয়ে রাউন্ড-ট্রিপ করে।
দৃঢ়তাঅডিও ডিকোডার ও মিডিয়া ডিকোডারকে দেওয়া হাজার হাজার র্যান্ডম ও বিট-ফ্লিপ করা ব্লক: সেগুলো ত্রুটি ফেরাতে হবে, কখনো প্যানিক বা মেমরি নিঃশেষ নয়।
ফ্রেমিং ও সহায়কট্রেইলিং ডেটাসহ চাংক ফ্রেমিং, পাথ স্যানিটাইজিং, ওয়াইল্ডকার্ড ও ফিল্টার ম্যাচিং, তারিখ ফরম্যাটিং, পাসওয়ার্ড জেনারেশন।
Deflate রিকম্প্রেশনDeflate স্তর 1, 3, 6 ও 9-এ ZIP কন্টেইনার, দুটি zlib স্ট্রিমসহ PDF, তিন-সদস্যের gzip, নন-কন্টেইনার; 400টি ক্ষতিগ্রস্ত বা কাটা রিকম্প্রেস করা স্ট্রিম পরিষ্কারভাবে ব্যর্থ হতে হবে (preflate প্যানিক ধরা হয়)।
মাল্টি-ইঞ্জিন ব্লক256 KiB ফ্রেম সীমানার চারপাশে zstd, LZMA2 ও PPMd ব্লকের মধ্য দিয়ে রাউন্ড ট্রিপ; 300টি ক্ষতিগ্রস্ত বা কাটা বডি; শত্রুভাবাপন্ন ইঞ্জিন প্যারামিটার; PPMd/LZMA2 ট্রায়াল।
গ্রাফিক্যাল ইন্টারফেসএকটি ভার্চুয়াল ডিসপ্লেতে (Xvfb) চালানো: idle, hover, progress ও done স্ক্রিন চাক্ষুষভাবে পরীক্ষিত; একটি ড্রপ করা ফোল্ডার বাইট-বাই-বাইট আর্কাইভ ও এক্সট্র্যাক্ট হয়; কম্প্রেশনের সময় Cancel ও বন্ধ করা কোনো ফাইল ফেলে রাখে না; ডিসপ্লে না থাকলে ব্যবহারের টেক্সটে ফিরে যায়।
লাইসেন্সnikpak-keygen ও PHP কিট দিয়ে তৈরি কী অভিন্ন ও গৃহীত; পরিবর্তিত নাম, ই-মেইল, টাইপ বা কী, এবং অন্য কী দিয়ে স্বাক্ষর করা কী, প্রত্যাখ্যাত হয়। একটি ভার্চুয়াল ডিসপ্লেতে: উভয় বাটন ক্রমে রিমাইন্ডার, ভুল কী ত্রুটি, সফল রেজিস্ট্রেশন, রিমাইন্ডার ছাড়া পুনরারম্ভ; টেক্সট বক্সের ভেতরে থাকে।
ভাষাপ্রতিটি ভাষা একই প্লেসহোল্ডার দিয়ে প্রতিটি টেক্সট অনুবাদ করে; Devanagari স্বরচিহ্ন ও আরবি যুক্তাক্ষর শেপ হয়; একটি ভার্চুয়াল ডিসপ্লেতে দশটি ভাষাই স্ক্রিন বাই স্ক্রিন পরীক্ষিত হয় (রিমাইন্ডার, idle, progress, done, About, রেজিস্ট্রেশন, ভাষা মেনু); একটি ভাষা বেছে নিলে সেটি সংরক্ষিত হয় এবং nikpak তাতে পুনরায় চালু হয়।
আর্কাইভ APIইনডেক্স পড়া, একটি ফোল্ডারের ভেতর থেকে একটি ফাইল এক্সট্র্যাক্ট করা (এটি ফোল্ডারের পাথ ছাড়াই নামে), একটি ফোল্ডার তার কনটেন্টসহ মুছে ফেলা ও সব মুছে ফেলা, -m5, zstd + এনক্রিপশন ও স্টোর করা আর্কাইভের জন্য; একটি ভুল পাসওয়ার্ড তেমনভাবেই রিপোর্ট হয়।
আর্কাইভ ব্রাউজারইমপ্লাইড ফোল্ডারসহ ট্রি নির্মাণ, টেক্সট শনাক্তকরণ ও ডিকোডিং (UTF-8, UTF-16, Windows-1252), ভিউয়ারে লাইন র্যাপিং ও সার্চ। একটি ভার্চুয়াল ডিসপ্লেতে: খোলা, পাসওয়ার্ড, নেভিগেশন, নির্বাচন, সার্চ, ভিউয়ার, এক্সট্র্যাক্ট, মুছে ফেলা ও টেস্ট, কয়েকটি ভাষায়।
স্কিন ও ফাইল-ম্যানেজার মেনুLinux মেনু ফাইল তৈরি ও পরীক্ষিত হয়; একটি নির্বাচনের জন্য একটি আর্কাইভ তিনটি প্রোগ্রাম হিসেবে শুরু হয়; একটি ভার্চুয়াল ডিসপ্লেতে তিনটি আইটেমসহ --add-here ও --extract-here / --extract-to; এনক্রিপ্টেড আর্কাইভ তাদের পাসওয়ার্ড চায় ও অভিন্ন ফাইল এক্সট্র্যাক্ট করে; প্রতিটি নতুন ইন্টারফেস টেক্সট দশটি ভাষায় অনূদিত (প্রতিটি-ভাষা-প্রতিটি-টেক্সট-অনুবাদ করে দাবিটি)।



14.2 এন্ড-টু-এন্ড টেস্ট

  • প্রতিটি বেঞ্চমার্ক আর্কাইভ এক্সট্র্যাক্ট করে তার উৎসের সাথে বাইট-বাই-বাইট তুলনা করা হয়েছিল (10,949-ফাইল সেটের জন্য SHA-256), কয়েকটি স্তরে।
  • একটি মিশ্র আর্কাইভ (WAV, MOD, BMP, টেক্সট, র্যান্ডম ডেটা, সাবফোল্ডার) তৈরি, তালিকাভুক্ত, পরীক্ষিত, সম্পূর্ণ এক্সট্র্যাক্ট করা হয়েছিল, এবং এর মাঝ থেকে একটি একক ফাইল এক্সট্র্যাক্ট করা হয়েছিল।
  • একই আর্কাইভ এনক্রিপশন দিয়ে তৈরি, সঠিক ও ভুল পাসওয়ার্ড দিয়ে পরীক্ষিত এবং এক্সট্র্যাক্ট করা হয়েছিল।
  • পূর্ববর্তী ফরম্যাট ভার্সনে (1.0) লেখা আর্কাইভ 1.1 খুলেছিল।
  • ইন্টারঅ্যাক্টিভ পাসওয়ার্ড প্রবেশ একটি সিউডো-টার্মিনালের মধ্য দিয়ে অনুশীলিত হয়েছিল: মিলে যাওয়া পাসওয়ার্ড, একটি অমিল, একটি খালি এন্ট্রি (জেনারেশন), খোলার সময় সঠিক ও ভুল পাসওয়ার্ড।

14.3 আক্রমণ পরীক্ষা

বিকৃতি, কাটা, চাংক পুনর্বিন্যাস, হেডার কারসাজি, আবর্জনা ফাইল ও অনুচ্ছেদ 10.1-এর পাথ-ট্রাভার্সাল আর্কাইভ প্রতিটি release candidate-এর বিরুদ্ধে চালানো হয়েছিল। ফলাফল অনুচ্ছেদ 8.6 ও 10.1-এ টেবিলে দেওয়া; প্রতিটি ক্ষেত্রে প্রত্যাশিত ফলাফল একটি প্রত্যাখ্যান, একটি স্পষ্ট বার্তা ও একটি অ-শূন্য এক্সিট কোড, কখনো প্যানিক নয় এবং কখনো গন্তব্যের বাইরে লেখা নয়।

14.4 টেস্টিংয়ে পাওয়া ত্রুটি

টেস্ট অভিযানই সেই কারণ যার জন্য কয়েকটি ত্রুটি প্রকাশিত প্রোগ্রামে নেই। দুটি উদাহরণ: একটি Rice-প্যারামিটার সার্চ যা 32-বিট অডিওতে ব্যর্থ হয়েছিল এবং একটি মাল্টি-গিগাবাইট কোড লিখে ফেলত (ইউনিট টেস্ট ম্যাট্রিক্সে পাওয়া ও ঠিক করা), এবং একটি zstd চেকসাম ব্যর্থতা যা জেনেরিক এক্সিট কোড 2-এর বদলে 3 দিয়ে রিপোর্ট হতো (টেম্পার টেস্টে পাওয়া ও ঠিক করা)। তৃতীয় উদাহরণটি বেঞ্চমার্ক পদ্ধতি নিজেই: RAR-এর সাথে প্রথম তুলনা তার নন-সলিড ডিফল্ট ব্যবহার করেছিল, যা সোর্স কোডে nikpak-কে বাড়িয়ে দেখিয়েছিল; এটি সলিড মোডে আবার করা হয়েছিল, এবং 11 অধ্যায়ের ফলাফলগুলো সংশোধিতগুলো।

15 সীমাবদ্ধতা ও রোডম্যাপ

15.1 বর্তমান সীমাবদ্ধতা

সীমাবদ্ধতাবিবরণ ও বিকল্প
কোনো রিকভারি রেকর্ড, ভলিউম বা SFX নেইক্ষতি শনাক্ত হয়, মেরামত হয় না (গুরুত্বপূর্ণ আর্কাইভের একটি দ্বিতীয় কপি রাখুন); প্রয়োজন হলে একটি সাধারণ টুল দিয়ে বড় আর্কাইভ ভাগ করুন।
কোনো ইন-প্লেস আপডেট নেইফরম্যাটটি একটি সলিড স্ট্রিম। মুছে ফেলা (nikpak d, বা unNik-এ Delete) আর্কাইভটি আবার লেখে; একটি বিদ্যমান আর্কাইভে ফাইল যোগ করা সমর্থিত নয়: একটি নতুন আর্কাইভ তৈরি করুন, বা -o+ দিয়ে ওভাররাইট করুন।
সিকোয়েন্সিয়াল অ্যাক্সেসএকটি খুব বড় আর্কাইভ থেকে একটি ফাইল এক্সট্র্যাক্ট করা তার আগের অংশ পড়ে (মিডিয়া এন্ট্রি ডিকোড ছাড়াই এড়ানো হয়); unNik শেষ নির্বাচিত ফাইলের পরে পড়া থামায়।
মিডিয়া কভারেজপূর্ণসংখ্যা PCM WAV ও AIFF, ProTracker MOD, অসংকোচিত BMP। Float WAV, ADPCM, XM/S3M/IT ও কমপ্রেস করা ছবি সাধারণ কম্প্রেশনে সংরক্ষিত হয়।
উচ্চ স্তরে মেমরি-m4 ও -m5 আর্কাইভ একটি 128 MiB উইন্ডো ব্যবহার করে; সেগুলো ডিকমপ্রেস করতে ততটুকু মেমরি লাগে।
সর্বোচ্চ স্তর -m5Single-threaded and the slowest level. Creating needs up to about 1.1 GB of memory, extracting up to about 350 MB.
সিম্বলিক লিংক ও তারিখআর্কাইভ করার সময় লিংক এড়ানো হয় ও এক্সট্র্যাক্ট করার সময় প্রত্যাখ্যাত হয়; তারিখ UTC-তে তালিকাভুক্ত হয়।
নিরাপত্তা পর্যালোচনাস্বাধীনভাবে অডিট হয়নি।
Windows ও macOS বিল্ডLinux-এ ডেভেলপ, পরীক্ষিত ও বেঞ্চমার্ক করা। Windows- ও macOS-নির্দিষ্ট কোড পাথ হাতে পর্যালোচনা করা হয়েছে কিন্তু সেই সিস্টেমে এখনো অনুশীলিত হয়নি: একটি বিল্ডের উপর নির্ভর করার আগে সেখানে cargo test --release চালান।



15.2 রোডম্যাপ

আইটেমউদ্দেশ্য
রিকভারি রেকর্ডReed-Solomon প্যারিটি যাতে ক্ষতিগ্রস্ত আর্কাইভ মেরামত করা যায়, যে প্রধান বৈশিষ্ট্যটি RAR ব্যবহারকারীরা মিস করে।
মাল্টি-ভলিউম আর্কাইভ ও আপডেট সমর্থনবড় আর্কাইভ ভাগ করা, ফাইল যোগ ও প্রতিস্থাপন করা।
একটি হাইব্রিড স্কিমসহ পাবলিক-কী শেয়ারিংML-KEM-এর সাথে মিলিয়ে X25519 দিয়ে একটি প্রাপকের কী-তে একটি আর্কাইভ এনক্রিপ্ট করা, যেকোনো একটি উপাদান টিকে থাকলে নিরাপদ।
আরও মিডিয়া ফিল্টারফ্লোটিং-পয়েন্ট অডিও, XM/S3M/IT ট্র্যাকার, PNG-এর রিকম্প্রেশন, TGA ও অসংকোচিত TIFF-এর জন্য একটি 2-D ফিল্টার।
ZIP ও RAR পড়া, শেল ইন্টিগ্রেশনunNik-এ সাধারণ ফরম্যাটগুলো আনপ্যাক করা এবং unNik থেকে ফাইল টেনে বের করা, যাতে nikpak-ই একমাত্র ইনস্টল করা টুল হতে পারে। (Explorer ও Finder কনটেক্সট মেনু 1.5.5-এ এসেছে, অনুচ্ছেদ 3.11।)
দ্রুততর সর্বোচ্চ স্তর-m5 একক-থ্রেডেড এবং অফিস ফাইলে 7-Zip -mx9-এর চেয়ে তিন গুণ পর্যন্ত ধীর: মাল্টি-থ্রেডেড LZMA2 ও PPMd ব্লক, অভিন্ন ফাইলের ডিডুপ্লিকেশন, এবং এক্সিকিউটেবলের জন্য একটি BCJ ফিল্টার।
বাহ্যিক নিরাপত্তা পর্যালোচনাক্রিপ্টোগ্রাফিক কোড ও এক্সট্র্যাক্টরের একটি স্বাধীন অডিট।



লাইসেন্স: NikPak বদ্ধ-সোর্স শেয়ারওয়্যার, © 2026 Nicolas Choukroun, Nikkoid LLC দ্বারা পরিবেশিত (LICENSE.txt, অনুচ্ছেদ 3.8); unNik ফ্রিওয়্যার (অনুচ্ছেদ 3.9)। এতে থাকা ওপেন-সোর্স উপাদানগুলো তাদের লাইসেন্সসহ THIRD-PARTY-NOTICES.txt-তে তালিকাভুক্ত, যা প্রতিটি কপির সাথে পাঠাতে হবে। প্রাইভেট লাইসেন্স কী (keys/nikpak-private.key) প্রতিটি প্রকাশিত প্যাকেজ ও ওয়েব রুটের বাইরে রাখুন। Cargo.lock রিপোজিটরিতে রাখুন যাতে বিল্ড পুনরুৎপাদনযোগ্য হয়, এবং আপনি সমর্থন করেন এমন প্রতিটি প্ল্যাটফর্মের continuous-integration জবে cargo test --release চালান।

A পরিশিষ্ট A: ফরম্যাট ধ্রুবক ও সীমা

আইটেমমান
ম্যাজিক 89 4E 49 4B 0D 0A 1A 0A
ফরম্যাট ভার্সন3 (রিডার 1, 2 ও 3 গ্রহণ করে)
হেডার আকার12 বাইট; এনক্রিপ্টেড হলে 59 বাইট
রেকর্ড টাইপ0 END, 1 FILE, 2 DIR, 3 MEDIA
আর্কাইভ পদ্ধতি0 store, 1 Zstandard, 2 মাল্টি-ইঞ্জিন ব্লক
ব্লক ইঞ্জিন1 Zstandard; 2 LZMA2 (ডিকশনারি 128 MiB পর্যন্ত লেখা, 1.5 GiB গ্রহণযোগ্য); 3 PPMd8 (order 8, 192 MiB লেখা; order 2-16, 1 GiB গ্রহণযোগ্য)
Deflate রিকম্প্রেশনZIP, PDF, gzip; ফাইল 512 MiB পর্যন্ত; প্রতি স্ট্রিমে 512 MiB প্লেইন ডেটা ও 64 MiB সংশোধন পর্যন্ত
সর্বোচ্চ নামের দৈর্ঘ্য4096 বাইট
এনক্রিপ্টেড চাংক64 KiB প্লেইনটেক্সট + 16-বাইট ট্যাগ, সামনে u32 বিগ-এন্ডিয়ান দৈর্ঘ্য
Argon2id (লেখা)64 MiB, 3 পাস, 4 লেন, 16-বাইট সল্ট, 32-বাইট কী
Argon2id (গ্রহণযোগ্য)মেমরি 8 x lanes .. 1 GiB, passes 1 .. 64, lanes 1 .. 64
স্ট্রিম নন্স19-বাইট র্যান্ডম প্রিফিক্স + 32-বিট কাউন্টার + 1-বাইট লাস্ট ফ্ল্যাগ = 24 বাইট
সর্বনিম্ন পাসওয়ার্ড দৈর্ঘ্য8 অক্ষর
তৈরি করা পাসওয়ার্ড24 অক্ষর, 56-প্রতীকের বর্ণমালা, প্রায় 139 বিট
মিডিয়া সর্বনিম্ন ফাইল আকার8 KiB (অঞ্চল কমপক্ষে 4 KiB)
NAC ব্লক4096 স্যাম্পল ফ্রেম; Shuffle ব্লক 32768 ফ্রেম
ট্রায়ালতিনটি 768 KiB উইন্ডো পর্যন্ত (5 %, 45 %, 85 %); 3 MiB পর্যন্ত হলে পুরো অঞ্চল; 2 % মার্জিন
BMP অঞ্চল সীমা256 MiB
Zstandard উইন্ডোডিফল্ট; -m4 ও -m5-এ লং-ডিস্ট্যান্স ম্যাচিংসহ 2^27
থ্রেড1 .. 256 (-mt)



B পরিশিষ্ট B: শব্দকোষ

শব্দঅর্থ
AEADঅ্যাসোসিয়েটেড ডেটাসহ অথেন্টিকেটেড এনক্রিপশন: এনক্রিপ্ট করে এবং যেকোনো পরিবর্তন শনাক্ত করে, ক্লিয়ারে পাঠানো ডেটারও (যেমন হেডার)।
Argon2idRFC 9106-এ মানীকৃত একটি মেমরি-হার্ড পাসওয়ার্ড-হ্যাশিং ফাংশন; ইচ্ছাকৃতভাবে উচ্চ মেমরি খরচে একটি পাসওয়ার্ডকে কী-তে রূপান্তর করে।
CRC32একটি 32-বিট চেকসাম যা আকস্মিক ক্ষতি শনাক্ত করে। কোনো নিরাপত্তা বৈশিষ্ট্য নয়।
FSEফাইনাইট-স্টেট এনট্রপি: Zstandard-এর ব্যবহৃত টেবিল-চালিত এনট্রপি কোডার।
Grover-এর অ্যালগরিদমএকটি কোয়ান্টাম সার্চ অ্যালগরিদম যা দ্বিঘাত গতি-বৃদ্ধি দেয়; সিমেট্রিক কী-এর কার্যকর দৈর্ঘ্য অর্ধেক করে।
LPCলিনিয়ার প্রেডিক্টিভ কোডিং: আগের স্যাম্পলগুলোর একটি ভরযুক্ত যোগফল থেকে একটি স্যাম্পল অনুমান করা।
Levinson-Durbinএকটি রিকার্শন যা একটি সিগন্যালের অটোকোরিলেশন থেকে প্রতিটি অর্ডারের সর্বোত্তম প্রেডিক্টর সহগ গণনা করে।
LZMA27-Zip ও xz-এর ব্যবহৃত Lempel-Ziv-Markov চেইন অ্যালগরিদম: সর্বোত্তম পার্সিং ও একটি বাইনারি রেঞ্জ কোডারসহ LZ77 ম্যাচিং।
MEDমিডিয়ান এজ ডিটেক্টর: LOCO-I / JPEG-LS ছবি কোডারের একটি পিক্সেল প্রেডিক্টর।
মেমরি-হার্ডএকটি ফাংশন যার খরচ মেমরি দ্বারা প্রভাবিত, যা GPU ও কাস্টম চিপ থেকে পাওয়া গতি-বৃদ্ধিকে সীমিত করে।
NACnikpak-এর লসলেস অডিও কোডেক।
PPMdPrediction by Partial Matching (ভ্যারিয়েন্ট I): আগের 8 বাইট পর্যন্ত থেকে প্রতিটি বাইট অনুমান করে; টেক্সটে খুব শক্তিশালী।
preflateএকটি পদ্ধতি (ও লাইব্রেরি) যা একটি Deflate স্ট্রিমকে তার প্লেইন ডেটা ও ছোট সংশোধনে রূপান্তর করে, যা থেকে অভিন্ন Deflate স্ট্রিম পুনর্নির্মাণ করা যায়।
Rice কোডিংপ্রায় জ্যামিতিক বিতরণযুক্ত সংখ্যার জন্য একটি সহজ, দ্রুত কোড: একটি ইউনারি ভাগফল ও একটি স্থির সংখ্যক নিচু বিট।
Shor-এর অ্যালগরিদমএকটি কোয়ান্টাম অ্যালগরিদম যা পূর্ণসংখ্যা উৎপাদকে বিশ্লেষণ করে ও ডিসক্রিট লগারিদম গণনা করে, RSA ও ইলিপ্টিক-কার্ভ ক্রিপ্টোগ্রাফি ভেঙে দেয়।
সলিড আর্কাইভএকটি আর্কাইভ যা একটি অবিচ্ছিন্ন স্ট্রিম হিসেবে কমপ্রেস হয়, যাতে ফাইলের মধ্যকার অপ্রয়োজনীয়তা কাজে লাগানো যায়।
STREAMএকটি নির্মাণ যা একটি দীর্ঘ বার্তাকে নন্সে কাউন্টার ও লাস্ট-চাংক ফ্ল্যাগসহ অথেন্টিকেটেড চাংক হিসেবে এনক্রিপ্ট করে।
জিগ-জ্যাগ ম্যাপিংসাইনড পূর্ণসংখ্যাকে আনসাইনডে ম্যাপ করা (0, -1, 1, -2 ... থেকে 0, 1, 2, 3 ...), যাতে ছোট মাত্রা ছোট সংখ্যায় পরিণত হয়।
Zstandardএকটি আধুনিক উন্মুক্ত কম্প্রেশন ফরম্যাট যা LZ77 ম্যাচিংকে Huffman ও FSE এনট্রপি কোডিংয়ের সাথে যুক্ত করে।



ভার্সন 1.6.2 · অক্টোবর 2026 পৃষ্ঠা 19