तकनीकी गाइड
संपूर्ण तकनीकी गाइड: आर्किटेक्चर और .nik फ़ॉर्मेट, कंप्रेशन इंजन और मीडिया कोडेक, एन्क्रिप्शन डिज़ाइन और क्वांटम प्रतिरोध, हार्डनिंग, सभी बेंचमार्क, और बिल्ड, परीक्षण व रोडमैप नोट्स।
1 परिचय
.nik प्रारूप के लिए एक कमांड-लाइन आर्काइवर है। इसे चार विचारों के इर्द-गिर्द डिज़ाइन किया गया था: स्थापित टूल्स से बेहतर संपीड़न, तेज़ काम, आधुनिक क्रिप्टोग्राफ़ी से डेटा की सुरक्षा, और Windows, macOS तथा Linux पर बिना किसी बदलाव के एक छोटे एग्ज़िक्यूटेबल के रूप में चलना।1.1 डिज़ाइन लक्ष्य
छोटा। जो डेटा लोग वास्तव में बड़ी मात्रा में आर्काइव करते हैं, उस पर RAR 7 को मात देना। ऑडियो, छवियाँ और ट्रैकर संगीत सामग्री से पहचाने जाते हैं और विशेष दोषरहित कोडेक से संपीड़ित किए जाते हैं; बाकी सब कुछ एक सुव्यवस्थित, मल्टी-थ्रेडेड Zstandard स्ट्रीम का उपयोग करता है। तेज़। संपीड़न और निष्कर्षण डिस्क द्वारा सीमित होने चाहिए, CPU द्वारा नहीं। अपने तेज़ स्तर -m2 पर nikpak एक कोर पर लगभग 200 MB स्रोत फ़ाइलों को एक सेकंड से कम समय में आर्काइव करता है। सुरक्षित। मेमोरी-हार्ड कुंजी व्युत्पत्ति फ़ंक्शन के साथ प्रमाणित एन्क्रिप्शन, फ़ाइल नाम हमेशा छिपे रहते हैं, छेड़छाड़ हमेशा पकड़ी जाती है, और एक ऐसा एक्सट्रैक्टर जिसे उसके गंतव्य फ़ोल्डर के बाहर लिखने के लिए धोखा नहीं दिया जा सकता। क्वांटम-प्रतिरोधी। केवल 256-बिट सिमेट्रिक क्रिप्टोग्राफ़ी का उपयोग किया जाता है। nikpak में कहीं भी RSA, एलिप्टिक-कर्व या Diffie-Hellman कोड नहीं है, इसलिए Shor के एल्गोरिदम को तोड़ने के लिए कुछ नहीं है। पोर्टेबल और स्क्रिप्ट-अनुकूल। एक स्थिर रूप से लिंक किया गया एग्ज़िक्यूटेबल, RAR-संगत कमांड लाइन, पूर्वानुमान योग्य एग्ज़िट कोड, और एक -helpजो हर विकल्प का दस्तावेज़ीकरण करता है।
1.2 एक नज़र में परिणाम
| 0.9 s | ||
सभी माप एक ही मशीन (Linux x86-64 वर्चुअल मशीन, एक CPU कोर) से RAR 7.00 और nikpak 1.1.0 के साथ लिए गए हैं। हर आर्काइव को फिर से निकालकर मूल से बाइट-दर-बाइट मिलाया गया। पूरी विधि, परीक्षण-संग्रह और वे मामले जहाँ RAR तेज़ है, अध्याय 11 में वर्णित हैं। |
1.3 यह किसके लिए है?
1.4 यह गाइड कैसे पढ़ें
1.5 समुदाय और संपर्क
Telegramhttps://t.me/cryptonikko Xhttps://x.com/cryptonikkoid Discordhttps://discord.com/users/1537826350759415811
2 सुविधा अवलोकन
2.1 क्षमताएँ
2.2 nikpak और RAR साथ-साथ
|
| ||
|---|---|---|
| 9.7 - 16.7 s (-m3) | ||
3 कमांड-लाइन संदर्भ
nikpak [options] [files...]। विकल्प आर्काइव नाम से पहले या बाद में कहीं भी आ सकते हैं; -- विकल्प पार्सिंग समाप्त कर देता है।3.1 कमांड
a | .nik जोड़ा जाता है। फ़ोल्डर हमेशा पुनरावर्ती रूप से लिए जाते हैं। |
x | -d dir) गंतव्य चुनता है। |
e | |
l | |
v | |
lb | |
t | |
p | |
d | |
mt | |
(none) |
3.2 विकल्प
-p |
-e | |
-p |
-P | |
-hp[password] |
| |
-m0
.. -m5 |
-0
.. -9 | |
-mt |
| |
-mc- / -mc+ |
| |
-r |
| |
-ep |
-j | |
-ep1 |
| |
-o+ |
-o | |
-o- |
-n | |
-or |
| name (1).ext। |
-y |
| |
-x |
-x | |
-d |
-d | x और e के लिए गंतव्य फ़ोल्डर। |
-inul -idq |
-q | |
@listfile |
| |
-h -help -? |
| -V संस्करण छापता है। |
-s, -ma5, -md64m, -ibck, -idp, -rr, -ts*, -w और ऐसे ही) स्वीकार करके अनदेखा कर दिया जाता है, ताकि मौजूदा टूल कॉन्फ़िगरेशन काम करते रहें। बाकी किसी भी चीज़ से एक स्पष्ट त्रुटि संदेश और एग्ज़िट कोड 7 मिलता है।nikpak --add और --add-here दिए गए आइटमों को एक नए आर्काइव में संपीड़ित करते हैं, nikpak --install-menu और --uninstall-menu राइट-क्लिक मेन्यू जोड़ते या हटाते हैं (सभी-उपयोगकर्ता इंस्टॉल के लिए --all-users), और unNik --extract, --extract-here तथा --extract-to मेन्यू से निष्कर्षण चलाते हैं।3.3 पासवर्ड विस्तार से
-p के साथ कोई आर्काइव बनाया जाता है, तो nikpak इसी क्रम में पासवर्ड तय करता है, और केवल इसलिए कभी विफल नहीं होता कि कोई पासवर्ड नहीं दिया गया:-pया-Pकमांड लाइन पर: जैसा है वैसा उपयोग (न्यूनतम 8 अक्षर)।एनवायरनमेंट वेरिएबल NIKPAK_PASSWORD, जो पासवर्ड को प्रोसेस सूची से बाहर रखता है।एक इंटरैक्टिव संकेत, पुष्टि के लिए दो बार पूछा जाता है। एक खाली प्रविष्टि यादृच्छिक पासवर्ड बनाती है। टर्मिनल के बिना (उदाहरण के लिए GUI के अंदर), stdin पर पाइप किया गया पासवर्ड; अगर कोई नहीं है तो यादृच्छिक पासवर्ड बनाया जाता है।
3.4 एग्ज़िट कोड
| 0 |
| |
| 1 | ||
| 2 | ||
| 3 | ||
| 7 | ||
| 10 | ||
| 11 |
3.5 उदाहरण
nikpak a backup.nik C:\Docs\*.txt Photos\ # create an archive
nikpak a -m5 -mt8 big.nik Projects\ # maximum, 8 threads
nikpak a -p secret.nik Taxes2026\ # encrypted, prompts
nikpak a -pMyLongPassw0rd s.nik f.pdf # password given
nikpak x backup.nik C:\Restore\ # extract with paths
nikpak e backup.nik *.jpg C:\Pics\ # only *.jpg, flat
nikpak x backup.nik Docs/report.pdf # extract ONE file
nikpak e backup.nik Docs/report.pdf -d C:\Out # one file, no path
nikpak x backup.nik Photos -d C:\Restore # one folder
nikpak l backup.nik *.pdf # list only PDFs
nikpak p backup.nik notes.txt # show a file
nikpak d backup.nik Temp *.bak # delete entries
nikpak l backup.nik # list
nikpak t secret.nik # test (asks password)
nikpak mt song.wav tracker.mod photo.bmp # which filter wins?
3.6 Total Commander और अन्य फ्रंट-एंड के साथ एकीकरण
a, x, e, l, t, @listfile, -p, -ep1, -o+, -y, -m), कोई भी प्रोग्राम जो बाहरी rar.exe चला सकता है, वह nikpak.exe भी चला सकता है। Total Commander में, एक्सटेंशन nik को Configuration, Packer, Additional packer programs के अंतर्गत पंजीकृत करें और पैकर तथा अनपैकर कमांड को nikpak.exe पर इंगित करें। अनअटेंडेड निष्कर्षण के लिए -o+ या -y उपयोग करें, क्योंकि कंसोल के बिना nikpak यह नहीं पूछ सकता कि अधिलेखित करना है या नहीं और इसके बजाय मौजूदा फ़ाइलों को छोड़ देगा। मेन्यू नाम Total Commander के संस्करणों के बीच अलग होते हैं; सटीक फ़ील्ड के लिए इसकी अंतर्निहित सहायता देखें।एक उद्धृत पथ जो बैकस्लैश पर समाप्त होता है, जैसे "C:\My Folder\", Windows द्वारा गलत पार्स किया जाता है (अंतिम उद्धरण को एस्केप माना जाता है)। रिक्त स्थानों वाले गंतव्यों के लिए इसके बजाय -d "C:\My Folder" उपयोग करें। |
3.7 ग्राफ़िकल इंटरफ़ेस

एक फ़ाइल या एक फ़ोल्डर, या एक साथ कई, विंडो पर ड्रॉप करें, या उन्हें डायलॉग में चुनने के लिए वृत्त पर क्लिक करें (या फ़ाइलें चुनें / फ़ोल्डर चुनें लिंक पर); वृत्त पर क्लिक करने से रिंग के अंदर फ़ाइलें चुनें और फ़ोल्डर चुनें दो बटन दिखते हैं। उन्हें सर्वोत्तम संपीड़न (-m5) से एक आर्काइव में संपीड़ित किया जाता है, जिसका नाम फ़ाइल (बिना उसके एक्सटेंशन), फ़ोल्डर, या कई आइटमों के लिए उनके मूल फ़ोल्डर के नाम पर रखा जाता है। मौजूदा आर्काइव कभी अधिलेखित नहीं होता: report.nik बन जाता है report (2).nik। प्रगति एक वृत्ताकार मीटर के अंदर बड़े प्रतिशत के रूप में दिखाई जाती है, साथ में चरण (विश्लेषण, संपीड़न, समापन), संसाधित मात्रा और समय। इसके नीचे Cancel बटन (या Esc कुंजी) लंबे संपीड़न को तुरंत रोक देता है और अधूरा आर्काइव हटा देता है; अगले के लिए विंडो खुली रहती है। संपीड़न के दौरान विंडो बंद करने से भी यही होता है। पूर्ण: रिंग हरी हो जाती है और आर्काइव का नाम, मूल की तुलना में उसका आकार और समय दिखाती है। फ़ोल्डर में दिखाएँ इसे Explorer, Finder या फ़ाइल प्रबंधक में खोलता है; और संपीड़ित करें (या वृत्त पर एक क्लिक) अगला शुरू करता है। इसमें सहेजें: नीचे का गंतव्य फ़ोल्डर टाइप किया जा सकता है या 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 में खोलें लिंक नए आर्काइव को तुरंत खोलते हैं। संपीड़न के दौरान बटन अक्षम रहता है। गंतव्य फ़ोल्डर खोलें: इसमें सहेजें फ़ील्ड और 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)।
cargo build --release --no-default-features से बनाया जाता है।
3.8 लाइसेंस और पंजीकरण (शेयरवेयर)


अनुस्मारक तब दिखता है जब कोई अपंजीकृत प्रति अपनी विंडो खोलती है। इसमें दो बटन होते हैं, पंजीकृत करें और मुफ़्त में आज़माएँ, जिनका बायाँ/दायाँ क्रम हर बार शुरू होने पर यादृच्छिक रूप से बदलता है। मुफ़्त में आज़माएँ (या 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 में, इसलिए प्रोग्राम का अध्ययन करके कोई भी कुंजियाँ नहीं बना सकता।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, निःशुल्क आर्काइव ब्राउज़र


नेविगेट करें फ़ोल्डर ट्री, ब्रेडक्रम्ब्स, 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, फ़ाइल कैसे संग्रहित है और उसके गुण दिखाता है; स्वयं आर्काइव के लिए उसका आकार, विधि और एन्क्रिप्शन। ट्री के नीचे का सारांश बचाया गया स्थान दिखाता है। वही दस भाषाएँ, भाषा बटन, About बॉक्स (i) और सामुदायिक बटन जैसे NikPak में। किसी भी लिपि के फ़ाइल नाम फ़ॉलबैक के रूप में सिस्टम के फ़ॉन्ट से बनाए जाते हैं। NikPak पर स्विच करें: i बटन के बाईं ओर नीचे-तीर वाला गोल बटन unNik बंद करके NikPak शुरू करता है। दोनों प्रोग्राम एक ही फ़ोल्डर में मिलते हैं। वे एक सेटिंग्स फ़ाइल साझा करते हैं, इसलिए एक में चुनी गई भाषा दूसरे में उपयोग होती है, और जो विंडो पहले से खुली है वह दो सेकंड के भीतर बदलाव का अनुसरण करती है। गंतव्य फ़ोल्डर खोलें: इजेक्ट बटन के बाईं ओर का बटन अंतिम निष्कर्षण के फ़ोल्डर को Explorer या Finder में खोलता है (किसी भी निष्कर्षण से पहले, आर्काइव का फ़ोल्डर)। unNik NikPak जैसी ही ध्वनियाँ बजाता है, आर्काइव खोलने, निकालने, हटाने और परीक्षण की ध्वनियों के साथ; इसका स्पीकर बटन और NikPak का स्पीकर बटन एक सेटिंग साझा करते हैं।

3.10 स्किन
स्किन बटन (एक पैलेट, दोनों प्रोग्रामों की शीर्षक पट्टी में): स्किन मेन्यू खोलता है, जहाँ हर स्किन अपने रंगों में बनी होती है। किसी स्किन पर इंगित करने से वह पूरी विंडो पर दिखती है; एक क्लिक उसे रख लेता है; Esc या बाहर क्लिक आपको पहले वाली स्किन पर लौटा देता है। सूर्य / चंद्रमा बटन उसके बगल में एक क्लिक में Nikkoid Blue (गहरा) और Nikkoid Bright के बीच स्विच करता है। स्किन बॉक्स प्रोग्राम के बाहर खड़ा रहता है। जब बॉक्स खुला होता है तो विंडो बॉक्स की चौड़ाई जितनी दाईं ओर चौड़ी हो जाती है: प्रोग्राम अपना 500 × 560 पैनल बनाए रखता है और बॉक्स उसके बगल के अतिरिक्त पारदर्शी स्थान में बैठता है, ताकि आज़माई जा रही स्किन के पीछे पूरा इंटरफ़ेस दिखाई देता रहे। बॉक्स को उसकी शीर्षक पट्टी से वापस प्रोग्राम के ऊपर या विंडो में कहीं और खींचा जा सकता है, और इसमें स्किन लागू करें और रद्द करें बटन हैं। किसी स्किन पर क्लिक उसे पूरी विंडो पर आज़माता है; लागू करें उसे रखता और दोनों प्रोग्रामों के लिए सहेजता है; रद्द करें (या Esc या ×) आपको पहले वाली स्किन पर लौटा देता है। प्रोग्राम पर क्लिक अब बॉक्स बंद नहीं करता। unNik की विंडो चौड़ी नहीं की जाती। चुनी गई स्किन सहेजी जाती है (सेटिंग्स फ़ाइल में skin=) और साझा होती है: एक प्रोग्राम में चुनी गई स्किन दूसरे द्वारा दो सेकंड के भीतर ले ली जाती है।आपकी अपनी स्किन: मेन्यू के नीचे “Import a skin…” एक Nikkomander .skin.jsonफ़ाइल (एक नाम और रंगों की सूची) पढ़ता है और उसे सेटिंग्स फ़ाइल के बगल वालेskinsफ़ोल्डर में कॉपी करता है; आयातित स्किन की टाइल पर × उसे हटा देता है।चित्रित स्किन इंटरफ़ेस के पीछे चली जाती हैं। चित्रित पृष्ठभूमियाँ src/skin_scenes.rsद्वारा बनाई जाती हैं, CSS ग्रेडिएंट से नहीं, इसलिए वे किसी भी विंडो आकार में फैल जाती हैं। 1.6.2 से हर एकdiscreet()चरण से गुजरती है जोsrc/skin.rsमें है: कला को अपने स्थानीय औसत की ओर खींचा जाता है, हल्का धुंधला किया जाता है और स्किन के पृष्ठभूमि रंग की ओर फीका किया जाता है — सबसे अधिक ड्रॉप रिंग और टेक्स्ट कॉलम के पीछे, लोगो के ऊपर थोड़ा अधिक — ताकि शीर्षक, रिंग और स्थिति टेक्स्ट सभी चौदह पर स्पष्ट रहें।
3.11 फ़ाइल-प्रबंधक मेन्यू
nikpak --install-menu; macOS: Finder 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। यहाँ निकालें / इसके अपने फ़ोल्डर में निकालें unNik की छोटी विंडो को प्रगति रिंग के साथ दिखाते हैं (एन्क्रिप्टेड आर्काइवों के लिए पासवर्ड बॉक्स) और सब कुछ निकल जाने पर उसे बंद कर देते हैं; चेतावनियाँ और त्रुटियाँ स्क्रीन पर रहती हैं।एक दूसरा सेटअप, unnik--setup.exe, उन लोगों के लिए अकेले unNik (निःशुल्क ब्राउज़र) स्थापित करता है जो केवल .nik आर्काइव प्राप्त करते हैं; जब NikPak पहले से स्थापित है तो यह केवल प्रोग्राम स्थापित करता है, ताकि मेन्यू कभी दोहरे न हों।
4 आर्किटेक्चर
4.1 आर्काइव बनाते समय डेटा प्रवाह

Write ट्रेट का एक कार्यान्वयन है जो अगले के चारों ओर लिपटा होता है, इसलिए वही कोड पथ एक सादे आर्काइव, एक एन्क्रिप्टेड आर्काइव और मीडिया परीक्षण को सेवा देता है।4.2 स्रोत कोड मानचित्र
main.rs | nikpak lb x | head)। |
cli.rs | -help टेक्स्ट। Clap-शैली लाइब्रेरियाँ -pSECRET या -m5 जैसे स्विचों को साफ-सुथरा व्यक्त नहीं कर सकतीं। |
archive.rs | |
media.rs | |
nac.rs | |
bits.rs | |
crypto.rs | |
format.rs | |
util.rs | |
error.rs | |
engine.rs | |
recomp.rs | |
gui.rs | |
unnik.rs | |
lib.rs, bin/unnik.rs | |
license.rs | |
i18n.rs | |
textshape.rs |
4.3 आर्काइव बनाना, चरण दर चरण
सत्यापित करें आउटपुट स्थान। मौजूदा आर्काइव केवल -o+(या इंटरैक्टिव हाँ) से बदला जाता है; अन्यथा nikpak समझाता है कि जोड़ना समर्थित नहीं है।एकत्र करें इनपुट: वाइल्डकार्ड विस्तारित किए जाते हैं (PowerShell ऐसा नहीं करता), @listfilesपढ़े जाते हैं, बहिष्करण लागू होते हैं, सिमलिंक और विशेष फ़ाइलें चेतावनी के साथ छोड़ दी जाती हैं, और आर्काइव कभी खुद में नहीं जोड़ा जाता।पासवर्ड तय करें यदि एन्क्रिप्शन माँगा गया था (अनुभाग 3.3) और Argon2id से कुंजी व्युत्पन्न करें। हेडर लिखें, फिर राइटर श्रृंखला बनाएँ: फ़ाइल, बफ़र्ड राइटर, वैकल्पिक चंक एन्क्रिप्टर, Zstandard एनकोडर। हर प्रविष्टि लिखें। मीडिया फ़ाइलें पहचान और परीक्षण से गुजरती हैं (अध्याय 7); बाकी सब कुछ 256 KiB टुकड़ों में कॉपी होता है जबकि CRC32 की गणना की जाती है। अंत चिह्न लिखें प्रविष्टि गणना के साथ, Zstandard फ़्रेम पूरा करें, अंतिम एन्क्रिप्टेड चंक सील करें और डिस्क पर फ्लश करें। नाम बदलें name.nik.tmpसेname.nik। यदि पहले कुछ विफल होता है, तो एक गार्ड ऑब्जेक्ट अस्थायी फ़ाइल हटा देता है, ताकि आधा लिखा आर्काइव कभी अच्छे आर्काइव को न बदले।
4.4 आर्काइव निकालना, चरण दर चरण
हेडर पढ़ें और सत्यापित करें: मैजिक, संस्करण, फ़्लैग, विधि और, एन्क्रिप्टेड आर्काइव के लिए, Argon2id पैरामीटर, जिन्हें कोई मेमोरी आवंटित होने से पहले सीमा-जाँचा जाता है। पासवर्ड प्राप्त करें और कुंजी व्युत्पन्न करें। पहला प्रमाणित चंक फिर पासवर्ड को सिद्ध या असिद्ध करता है। प्रविष्टि स्ट्रीम पर चलें। किसी भी फ़ाइल-सिस्टम पहुँच से पहले हर प्रविष्टि नाम साफ़ किया जाता है (अनुभाग 10.1)। फ़ाइलें लिखें create_newके साथ, टाइमस्टैम्प और अनुमतियाँ सेट करें, और पुनर्निर्मित बाइट्स का CRC32 सत्यापित करें। जो फ़ाइल अपना CRC विफल करती है उसे रखने के बजाय हटा दिया जाता है।अंत सत्यापित करें आर्काइव का: अंत चिह्न के बाद स्ट्रीम वास्तव में समाप्त होनी चाहिए और, यदि एन्क्रिप्टेड है, अंतिम प्रमाणित चंक संसाधित हुआ होना चाहिए। यह कटाव और जोड़े गए डेटा को पकड़ता है।
4.5 मेमोरी और थ्रेडिंग
-mt)। डीकंप्रेशन, ऑडियो कोडेक और एन्क्रिप्शन कॉलिंग थ्रेड पर चलते हैं। Argon2id को कुंजी व्युत्पत्ति के लिए 64 MiB चाहिए, और सबसे ऊँचे दो स्तर 128 MiB मिलान विंडो उपयोग करते हैं, इसलिए ऐसे आर्काइवों को डीकंप्रेस करने के लिए उतनी ही मेमोरी चाहिए।5 .nik कंटेनर प्रारूप
.nik फ़ाइल एक छोटा स्थिर हेडर होता है जिसके बाद बॉडी आती है। बॉडी एक सॉलिड स्ट्रीम है: सभी प्रविष्टियाँ जोड़ी जाती हैं, एक साथ संपीड़ित होती हैं, और वैकल्पिक रूप से एन्क्रिप्ट होती हैं। प्रारूप का संस्करण 2 मीडिया रिकॉर्ड जोड़ता है; संस्करण 1 के आर्काइव पठनीय रहते हैं।5.1 हेडर
| 0 | 8 | 89 4E 49 4B 0D 0A 1A 0A (PNG विचार: टेक्स्ट-मोड स्थानांतरण क्षति का पता लगाता है) | |
| 8 | 1 | ||
| 9 | 1 | ||
| 10 | 1 | ||
| 11 | 1 | 0 | |
| 12 | 4 | ||
| 16 | 4 | ||
| 20 | 4 | ||
| 24 | 16 | ||
| 40 | 19 |
5.2 प्रविष्टि रिकॉर्ड
0 END | count:u64। अंत को चिह्नित करता है और बताता है कि उससे पहले कितनी प्रविष्टियाँ हैं। |
1 FILE | name_len:u16 name mtime:i64 mode:u32 size:u64 data[size] crc32:u32 |
2 DIR | name_len:u16 name mtime:i64 mode:u32 |
3 MEDIA | name_len:u16 name mtime:i64 mode:u32 size:u64 filter:u8 method:u8 params_len:u8 params framed_stream crc32:u32 |
नाम UTF-8 हैं /विभाजकों के साथ, अधिकतम 4096 बाइट।mtimeUnix सेकंड है;modeUnix अनुमति शब्द है (Windows फ़ाइलों को 0644 या 0755 मिलता है, केवल-पठन होने पर 0444)।CRC32 हमेशा मूल बाइट्स को कवर करता है, जो मीडिया फ़िल्टरों को सत्यापन योग्य बनाता है। MEDIA रिकॉर्ड में sizeमूल आकार है।framed_stream[u32 length][bytes]चंकों की एक श्रृंखला है जो शून्य लंबाई पर समाप्त होती है, इसलिए रीडर हमेशा किसी मीडिया प्रविष्टि को उसके फ़िल्टर को समझे बिना छोड़ सकता है।
मीडिया पैरामीटर
offset:u64 frames:u64 channels:u8 bits:u8 flags:u8 (फ़्लैग बिट 0 = बिग एंडियन, बिट 1 = चिह्नित) | ||
offset:u64 width:u32 rows:u32 bpp:u8 stride:u32 | ||
none: the framed stream holds raw segments and recompressed Deflate streams (section 7.9) |
offset से पहले की हर चीज़ (हेडर, टैग, पैलेट, MOD पैटर्न) और सैंपल या पिक्सेल क्षेत्र के बाद की हर चीज़ (अनुगामी चंक) फ़िल्टर किए गए डेटा के चारों ओर अपरिवर्तित संग्रहित की जाती है।5.3 एन्क्रिप्टेड बॉडी फ़्रेमिंग
5.4 सॉलिड स्ट्रीम क्यों?
5.5 संस्करण प्रबंधन
5.6 मल्टी-इंजन बॉडी (संस्करण 3)
6 संपीड़न इंजन
6.1 Zstandard क्यों
6.2 स्तर मैपिंग
-m0 .. -m5) और zip-शैली स्तर (-0 .. -9) दोनों स्वीकार करता है और उन्हें Zstandard स्तरों पर मैप करता है:
-m0 | ||
-m1 | 1 | |
-m2 | 3 | |
-m3 | 9 | |
-m4 | 15 | |
-m5 (default) |
-0 स्टोर करता है, -1 से -6 Zstandard 1 से 6 उपयोग करते हैं, -7 9 उपयोग करता है, -8 12 उपयोग करता है और -9 -m5 के समान है।6.3 बड़ी विंडो और लंबी-दूरी मिलान
-m5 पर आउटपुट 26.3 MB से घटाकर 24.4 MB और -m4 पर 29.5 MB से 26.8 MB कर दिया, -m4 के लिए बिना गति-हानि और -m5 के लिए थोड़ी-सी। 2^27 की विंडो Zstandard की डिफ़ॉल्ट डिकोडर सीमा के भीतर है, इसलिए कोई भी मानक डिकोडर डेटा पढ़ सकता है।6.4 मल्टी-थ्रेडिंग
6.5 स्ट्रीम के अंदर अखंडता
6.6 स्टोर मोड
-m0 प्रविष्टियों को असंपीड़ित लिखता है। यह पहले से संपीड़ित डेटा के लिए उपयोगी है, और यह एकमात्र मोड भी है जिसमें मीडिया फ़िल्टर जानबूझकर छोड़े जाते हैं: जो उपयोगकर्ता स्टोर माँगता है वह डेटा के बदले जाने की अपेक्षा नहीं करता।6.7 अधिकतम स्तर: LZMA2 और PPMd
बाइनरी ब्लॉक। फ़ोल्डर, बाइनरी फ़ाइलें, मीडिया प्रविष्टियाँ और Deflate-पुनर्संपीड़ित प्रविष्टियाँ LZMA2 से संपीड़ित होती हैं: preset 9, nice length 273, match-finder depth 32, और डेटा के अनुसार आकार की डिक्शनरी (1 से 128 MiB)। टेक्स्ट ब्लॉक। जिन फ़ाइलों के पहले 64 KiB में कोई शून्य बाइट नहीं और लगभग कोई नियंत्रण अक्षर नहीं होते (स्रोत कोड, टेक्स्ट, CSV, HTML, XML ...) वे दूसरे ब्लॉक में जाती हैं। इन फ़ाइलों के चार सन्निहित 1 MiB समूह PPMd variant I (order 8, 192 MiB मॉडल) और टेक्स्ट के लिए ट्यून किए गए LZMA2 (lc 4, pb 0) से परीक्षण-संपीड़ित किए जाते हैं, और छोटा परिणाम जीतता है। गद्य PPMd को पसंद करता है; कई लगभग-समान फ़ाइलों वाले बड़े स्रोत ट्री LZMA2 को पसंद करते हैं, क्योंकि यह फ़ाइलों के बीच लंबे दोहराव कॉपी कर सकता है। क्रम। हर ब्लॉक के भीतर, फ़ाइलें एक्सटेंशन से, फिर फ़ाइल नाम से क्रमबद्ध होती हैं, जैसा 7-Zip करता है, ताकि समान या मिलती-जुलती फ़ाइलें पड़ोसी हों। सन्निहित परीक्षण नमूने के साथ, इसने सामान्य डेटा सेट को 7.5 % छोटा किया।
7 मीडिया बुद्धिमत्ता
7.1 सामग्री से पहचान
.dat नाम बदला गया WAV अब भी मिल जाता है और .wav नाम की टेक्स्ट फ़ाइल नहीं।RIFF..WAVE, एक fmt चंक जिसमें पूर्णांक PCM (format 1, या PCM उप-प्रारूप वाला WAVE_FORMAT_EXTENSIBLE), 8/16/24/32 बिट, 1 से 8 चैनल, संगत ब्लॉक संरेखण; फिर data चंक | ||
FORM..AIFF या AIFC (compression NONE या twos), COMM और SSND चंक, बिग-एंडियन चिह्नित सैंपल | ||
BM, 40 बाइट या अधिक का DIB हेडर, कोई संपीड़न नहीं, 8, 24 या 32 बिट प्रति पिक्सेल, पिक्सेल पंक्तियाँ जो फ़ाइल में समाती हैं, क्षेत्र 4 KiB से 256 MiB के बीच |
7.2 परीक्षण: प्रति फ़ाइल सर्वोत्तम फ़िल्टर चुनना
एक नमूना लें: पूरा सैंपल क्षेत्र जब वह 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 ऑडियो कोडेक

ब्लॉक और स्टीरियो डीकोरिलेशन
| 0 | ||
| 1 | R = L - S | |
| 2 | L = R + S | |
| 3 | sum = (M << 1) | (S & 1), L = (sum + S) >> 1, R = (sum - S) >> 1 |
Side = L - R और Mid = (L + R) >> 1। साइड चैनल को सामान्य चैनल से एक बिट अधिक चाहिए और इसे bits + 1 से कोडित किया जाता है। मोड सस्ते में चुना जाता है: एनकोडर L, R, M और S के order-2 स्थिर-प्रेडिक्टर रेज़िडुअल के निरपेक्ष मान जोड़ता है और सबसे छोटे योग वाली जोड़ी लेता है। जिन रिकॉर्डिंगों के चैनल दृढ़ता से सहसंबद्ध हैं, वहाँ Mid/Side आम तौर पर कुछ प्रतिशत बचाता है।सब-फ़्रेम प्रकार
स्थिर प्रेडिक्टर
order 0: e[i] = x[i]
order 1: e[i] = x[i] - x[i-1]
order 2: e[i] = x[i] - 2*x[i-1] + x[i-2]
order 3: e[i] = x[i] - 3*x[i-1] + 3*x[i-2] - x[i-3]
order 4: e[i] = x[i] - 4*x[i-1] + 6*x[i-2] - 4*x[i-3] + x[i-4]
order सैंपल वार्म-अप मानों के रूप में वर्बेटिम संग्रहित होते हैं।रैखिक पूर्वानुमानित कोडिंग (LPC)
ब्लॉक पर एक Tukey विंडो लगाएँ (पहले और अंतिम चौथाई पर टेपर), ताकि उसके किनारे सांख्यिकी विकृत न करें। विंडो किए गए संकेत की स्वसहसंबंध r[0..32]गणना करें।Levinson-Durbin रिकर्सन चलाएँ, जो 1 से 32 तक हर order के लिए इष्टतम गुणांक सेट एक ही पास में देता है: 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) ताकि सबसे बड़ा गुणांक ठीक समाए। राउंडिंग त्रुटि फीडबैक उपयोग करती है, ताकि क्वांटाइज़ेशन त्रुटियाँ गुणांकों में जमा न हों।कई order का मूल्यांकन करें (सेट प्रयास स्तर पर निर्भर करता है, नीचे), हर एक का रेज़िडुअल गणना करें, और सबसे छोटे अनुमानित कुल आकार वाले को रखें, जिसमें उसके गुणांक भेजने की लागत शामिल है।
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 order आज़माए जाते हैं। अधिक order का अर्थ थोड़ा छोटा परिणाम और धीमा एनकोडर; डिकोडर की गति वही रहती है।| -m1 | 0 | 8, 16 |
| -m2, -m3 | 1 | 4, 8, 12, 16, 24, 32 |
| -m4, -m5 | 2 | 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 24, 28, 32 |
ब्लॉक का बिट लेआउट
block := [stereo mode: 2 bits] sub-frame [sub-frame] (byte-padded)
sub-frame := type:2 ...
CONSTANT : value:width
VERBATIM : wasted:5 samples:(n x (width - wasted))
FIXED : wasted:5 order:3 warm-up residual
LPC : wasted:5 order-1:5 precision-1:4 shift:5
coefficients warm-up residual
residual := partition-order:4 per partition: k:5 Rice-coded values
7.4 स्व-सत्यापन
-mc- उपयोग करने के सुझाव के साथ रुक जाती है। फ़ॉलबैक पथ यूनिट परीक्षणों द्वारा अभ्यासित है, जो बिट गहराई और चैनल गणना के हर संयोजन के लिए वर्बेटिम कोडिंग बाध्य करते हैं, और यह तंत्र संभावित मूक डेटा-हानि बग को एक पहचाने गए, पुनर्प्राप्ति योग्य स्थिति में बदल देता है।7.5 Shuffle और Shuffle+Delta
Shuffle सैंपलों के बाइट्स को प्लेनों में अलग करता है: चैनल 0 के सभी न्यूनतम-महत्व बाइट, फिर चैनल 0 के सभी अधिकतम-महत्व बाइट, फिर चैनल 1, और इसी तरह, 32768 फ़्रेमों के ब्लॉकों में। उच्च-बाइट प्लेन चिकना होता है और निम्न-बाइट प्लेन की वर्णमाला बहुत सीमित होती है; Zstandard का एन्ट्रॉपी कोडर हर एक को अंतर्गुंथित मिश्रण से कहीं बेहतर मॉडल करता है। Shuffle+Delta पहले हर सैंपल को उसी चैनल के पिछले सैंपल से उसके अंतर से बदल देता है (सैंपल चौड़ाई के मॉड्यूलो, ताकि यह बिल्कुल उत्क्रमणीय हो, ब्लॉकों के बीच स्थिति बनी रहती है) और फिर शफ़ल करता है। यह तब मदद करता है जब संकेत चिकना हो पर NAC के जीतने के लिए पर्याप्त पूर्वानुमान योग्य न हो।
-m2 पर मूल आकार का 51 % और -m5 पर 47 % है, जबकि सादे Zstandard के लिए 63 %।7.6 ProTracker MOD फ़ाइलें
patterns = max(order table) + 1
sample_start = 1084 + patterns * 256 * channels (4 ch: 1024 B per pattern)
sample_bytes = sum of (length in words * 2) over the 31 descriptors,
clamped to the end of the file
7.7 BMP छवियाँ
विभाजित करें पिक्सेल क्षेत्र को प्रति चैनल एक प्लेन में (32-बिट के लिए B, G, R, और A), प्रति-पंक्ति पैडिंग बाइट अलग से याद रखते हुए। रंग डीकोरिलेट करें। नीले और लाल प्लेनों से हरे प्लेन को घटाएँ (मॉड्यूलो 256)। तस्वीरों में तीनों चैनल दृढ़ता से सहसंबद्ध होते हैं, इसलिए अंतर छोटे होते हैं। हर पिक्सेल का पूर्वानुमान करें उसके पड़ोसियों से MED (माध्यिका किनारा डिटेक्टर) प्रेडिक्टर से, वही जो LOCO-I छवि कोडर उपयोग करता है: बाएँ a, ऊपरbऔर ऊपर-बाएँcके लिए, पूर्वानुमानmin(a,b)है यदिc >= max(a,b),max(a,b)यदिc <= min(a,b), और अन्यथाa + b - c। पूर्वानुमान त्रुटि पिक्सेल को बदल देती है (मॉड्यूलो 256)। किनारों पर प्रेडिक्टर किनारे का अनुसरण करता है; चिकने ग्रेडिएंट पर वह ग्रेडिएंट का एक्सट्रापोलेशन करता है।जोड़ें रेज़िडुअल प्लेनों और पैडिंग बाइट्स को और Zstandard को उन्हें संपीड़ित करने दें। चिकने क्षेत्र लगभग-शून्य बाइटों की श्रृंखलाएँ बन जाते हैं।
7.8 यह RAR से बेहतर क्यों है
7.9 ऑफ़िस दस्तावेज़, PDF और gzip: Deflate पुनर्संपीड़न
सामग्री से पहचान। फ़ाइल की शुरुआत में 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 हर प्रविष्टि की तरह जाँचा जाता है।
8 एन्क्रिप्शन
8.1 ख़तरा मॉडल
फ़ाइल सामग्री और उनके बारे में हर चीज़ की गोपनीयता: नाम, आकार, टाइमस्टैम्प, अनुमतियाँ और फ़ाइलों की संख्या। अखंडता और प्रामाणिकता: आर्काइव में कोई भी बदलाव, चाहे डेटा, हेडर, डेटा के क्रम या उसकी लंबाई में हो, गलत डेटा स्वीकार होने से पहले पकड़ा जाता है। अनुमान-प्रतिरोध: हर पासवर्ड अनुमान को यथासंभव महँगा बनाया जाता है।
8.2 पासवर्ड से कुंजी तक: Argon2id
| 3 | ||
| 4 | ||
8.3 STREAM निर्माण में XChaCha20-Poly1305
nonce (24 bytes) = random prefix (19 bytes)
| chunk counter (4 bytes, big endian)
| last-chunk flag (1 byte)
u32 length + सिफरटेक्स्ट + 16-बाइट टैग के रूप में संग्रहित | |
8.4 एक प्रेक्षक क्या देख सकता और नहीं देख सकता
8.5 पासवर्ड संभालना
न्यूनतम लंबाई। आर्काइव बनाते समय 8 अक्षर; छोटे पासवर्ड स्पष्टीकरण के साथ अस्वीकार किए जाते हैं। पुष्टि। इंटरैक्टिव संकेत दो बार पूछता है, टाइप किए अक्षर प्रदर्शित नहीं करता, और बेमेल अस्वीकार करता है। निर्माण। पासवर्ड के बिना, nikpak 56-चिह्न वर्णमाला से 24 अक्षर खींचता है जो मिलते-जुलते (0/O, 1/l/I) छोड़ देती है, ऑपरेटिंग सिस्टम के क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक जनरेटर पर अस्वीकृति नमूनाकरण उपयोग करते हुए ताकि कोई चिह्न दूसरे से अधिक संभावित न हो। यह 24 x log2(56), लगभग 139 बिट एन्ट्रॉपी है, और इसे एक बार, स्पष्ट रूप से चिह्नित बॉक्स में दिखाया जाता है। मेमोरी स्वच्छता। व्युत्पन्न कुंजी और पासवर्ड स्ट्रिंग जब आवश्यक नहीं रहते तो मेमोरी से मिटा दिए जाते हैं ( zeroizecrate)।चैनल। कमांड लाइन ( -p), एनवायरनमेंट वेरिएबलNIKPAK_PASSWORD, इंटरैक्टिव संकेत, या टर्मिनल न होने पर stdin। कमांड-लाइन रूप सुविधाजनक है पर प्रोसेस सूची में दिखता है; अन्य रूप बेहतर हैं।
8.6 हमला परीक्षण
एक कमज़ोर पासवर्ड हमेशा अनुमान लगाया जा सकता है; Argon2id इसे महँगा बनाता है पर password123 को बचा नहीं सकता। nikpak का स्वतंत्र ऑडिट नहीं हुआ है। यह कीलॉगर, मैलवेयर या चल रहे प्रोसेस की मेमोरी पढ़ने वाले से रक्षा नहीं कर सकता। जिनके डेटा का उजागर होना गंभीर हानिकारक हो, उन्हें पहले कार्यान्वयन की क्रिप्टोग्राफ़र से समीक्षा करवानी चाहिए। |
9 क्वांटम प्रतिरोध
9.1 क्वांटम कंप्यूटर क्या बदलते हैं
9.2 nikpak की स्थिति
9.3 पासवर्ड के बारे में क्या?
9.4 "अभी संचित करें, बाद में डिक्रिप्ट करें"
9.5 ईमानदार सीमाएँ और आगे का रास्ता
"क्वांटम-प्रतिरोधी" का अर्थ है कि कोई ज्ञात क्वांटम एल्गोरिदम इन प्रिमिटिवों के विरुद्ध सामान्य खोज को नहीं हराता। यह प्रमाण नहीं है; ChaCha20 और Argon2 का क्रिप्टएनालिसिस जारी है, और प्रारूप संस्करणित है ताकि पैरामीटर या एल्गोरिदम बदले जा सकें। यदि कभी सार्वजनिक-कुंजी साझा जोड़ा जाए (किसी प्राप्तकर्ता की कुंजी के लिए आर्काइव एन्क्रिप्ट करना), तो यह एक हाइब्रिड योजना उपयोग करेगा, X25519 को ML-KEM के साथ जोड़कर, ताकि यदि कोई भी एक घटक टिके तो सुरक्षित रहे। क्वांटम प्रतिरोध कार्यान्वयन त्रुटियों से रक्षा नहीं करता। अनुभाग 8.6 और 10 देखें।
10 सख़्ती और मज़बूती
10.1 सुरक्षित निष्कर्षण
पथ ट्रैवर्सल ("zip slip")। हर प्रविष्टि नाम सामान्यीकृत होता है: बैकस्लैश स्लैश बन जाते हैं, खाली और .घटक हटा दिए जाते हैं, और कोई भी..घटक प्रविष्टि को चेतावनी के साथ छोड़ने का कारण बनता है। निरपेक्ष नाम अपना रूट खो देते हैं, इसलिए/etc/passwdगंतव्य फ़ोल्डर के अंदर निकाला जाता है।Windows नाम। Windows पर चलते समय, < > : " | ? *या नियंत्रण अक्षर रखने वाले, रिक्त स्थान या बिंदु पर समाप्त होने वाले, या आरक्षित डिवाइस नाम (CON, PRN, AUX, NUL, COM1-9, LPT1-9) के बराबर घटक अस्वीकार किए जाते हैं।सिम्बॉलिक लिंक। लिखने से पहले, गंतव्य के नीचे लक्ष्य पथ का हर मौजूदा घटक जाँचा जाता है; लिंक का कभी अनुसरण नहीं होता। मौजूदा फ़ाइल पहले हटाई जाती है और नई create_newसे बनाई जाती है, जो मौजूदा पथ खोलने से इनकार करता है, इसलिए लेखन को पुनर्निर्देशित करने के लिए लिंक उपयोग नहीं हो सकता।विशेषाधिकार बिट। Setuid, setgid और sticky बिट कभी बहाल नहीं होते; अनुमतियाँ सामान्य rwx बिट तक सीमित रहती हैं। विफल फ़ाइलें। जिस फ़ाइल का CRC32 नहीं मिलता उसे हटा दिया जाता है, पीछे नहीं छोड़ा जाता।
../../evil.txt, /tmp/evil.txt, ..\..\evil.txt और ok/../../evil.txt वाला हाथ से बना आर्काइव निकाला गया: कुछ भी गंतव्य से बाहर नहीं गया, असुरक्षित प्रविष्टियाँ सूचित और छोड़ी गईं, और गंतव्य में रोपा गया सिमलिंक अस्वीकार किया गया।10.2 सीमित डिकोडर
Argon2id पैरामीटर किसी भी आवंटन से पहले सीमा-जाँचे जाते हैं (अनुभाग 8.2)। एन्क्रिप्टेड चंकों की लंबाई 16 बाइट और 64 KiB + 16 के बीच होनी चाहिए; नाम अधिकतम 4096 बाइट; ऑडियो ब्लॉकों को एक विश्वसनीय लंबाई घोषित करनी चाहिए; BMP क्षेत्र 256 MiB तक सीमित; यूनरी Rice कोड सीमित हैं। यूनिट परीक्षणों में ऑडियो और मीडिया डिकोडरों को हज़ारों यादृच्छिक और बिट-फ़्लिप्ड इनपुट खिलाए गए और उन्हें त्रुटि लौटानी चाहिए, कभी पैनिक या एबॉर्ट नहीं करना चाहिए। nikpak के अपने कोड में कोई unsafeब्लॉक नहीं है, और Rust की सीमा जाँच C में मेमोरी-भ्रष्टता बग होने वाली किसी भी तर्क त्रुटि को एक साफ विफलता में बदल देती है।
t से परखें।10.3 सुरक्षित निर्माण और ईमानदार त्रुटियाँ
आर्काइव name.nik.tmpमें लिखा जाता है और पूर्ण होने पर ही नाम बदला जाता है; किसी भी विफलता पर गार्ड अस्थायी फ़ाइल हटा देता है, इसलिए बाधित रन कभी आधा लिखा या बदला हुआ आर्काइव नहीं छोड़ता।यदि आर्काइव होते समय कोई फ़ाइल छोटी हो जाए, तो nikpak असंगत प्रविष्टि लिखने के बजाय स्पष्ट संदेश के साथ रुक जाता है। अपठनीय फ़ाइलें, सिम्बॉलिक लिंक और विशेष फ़ाइलें चेतावनी के साथ छोड़ दी जाती हैं (एग्ज़िट कोड 1) और आर्काइव कभी खुद में नहीं जोड़ा जाता। त्रुटियाँ वर्गीकृत हैं ताकि स्क्रिप्ट प्रतिक्रिया कर सकें: आर्काइव के अंदर चेकसम या फ़्रेम त्रुटि भ्रष्टता है (exit 3), प्रमाणीकरण विफलता गलत पासवर्ड या छेड़छाड़ है (exit 11), अस्वीकृत लेखन घातक त्रुटि है (exit 2)।
11 बेंचमार्क
11.1 विधि
-ma5 प्रारूप); nikpak 1.1.0 रिलीज़ मोड में LTO के साथ बिल्ड; ऑडियो संदर्भ के रूप में FLAC 1.x -8। | |
-m3 (RAR का डिफ़ॉल्ट) और -m5 (सर्वोत्तम)। सामान्य-डेटा परीक्षण के लिए -s (सॉलिड) और -md256m (256 MB डिक्शनरी) भी, क्योंकि nikpak आर्काइव हमेशा सॉलिड होते हैं और निष्पक्ष तुलना के लिए RAR को वही अनुमति दी जानी चाहिए। | |
cmp, सामान्य सेट की सभी 10,949 फ़ाइलों के लिए SHA-256)। |
परीक्षण सामग्री
संगीत कृत्रिम है: इसे MIDI से रेंडर किया गया था और इसमें दोहराए गए अंश हैं, जो NAC के बाद Zstandard चरण सहित हर LZ-आधारित टूल की मदद करते हैं। वास्तविक रिकॉर्डिंगों में कम सटीक दोहराव होते हैं, इसलिए निरपेक्ष आकार भिन्न होंगे। तुलना सभी टूल्स को समान रूप से मानती है, और उसी फ़ाइल पर FLAC का परिणाम पुष्टि करता है कि ऑडियो कोडेक स्वयं प्रतिस्पर्धी है, पर विशिष्ट सामग्री वाले पाठकों को उसे मापना चाहिए: nikpak mt ठीक यही करता है। |
11.2 मीडिया फ़ाइलें
| 9,183,956 | 2,862,744 | 2,035,223 | 1,750,706 | ||
| 2,507,557 | 1,070,290 | 966,622 | 927,973 | ||
| 2,991,820 | 1,605,879 | 1,529,219 | 1,418,532 | ||
| 17,371,848 | 11,024,411 | 9,415,519 | 9,411,898 | ||
| 4,342,996 | 3,112,135 | 2,635,819 | 2,634,669 | ||
| 2,171,520 | 844,160 | 742,462 | 740,751 | ||
| 28,362,206 | 21,467,283 (-m3) | 18,689,529 | 18,688,030 |
-m3 पर मापा गया, इसलिए वह पंक्ति अन्य की तुलना में कमज़ोर तुलना है।

मीडिया फ़िल्टर क्या जोड़ते हैं
| 3,580,971 | 2,035,223 | 43.2 % | |
| 1,260,607 | 966,622 | 23.3 % | |
| 1,876,722 | 1,529,219 | 18.5 % | |
| 15,585,422 | 9,415,519 | 39.6 % | |
| 3,887,183 | 2,635,819 | 32.2 % | |
| 1,078,493 | 742,462 | 31.2 % |
FLAC से तुलना
-8, समर्पित संदर्भ एनकोडर, 9,407,019 बाइट बनाता है। उसी ऑडियो के लिए NAC स्ट्रीम 9,425,305 बाइट है, 0.2 % के भीतर, और तैयार nikpak आर्काइव 9,415,519 बाइट। 22 kHz मोनो और 8-बिट संस्करणों के लिए NAC FLAC से छोटा है (2,635,446 बनाम 2,638,954, और केवल ऑडियो क्षेत्र के लिए 785,890 बनाम 798,810), और 24-बिट के लिए आर्काइव (18.69 MB) FLAC के 19.12 MB से छोटा है। गैलरी फ़ाइलों पर FLAC काफ़ी कमज़ोर है (RAR के 1.61 MB के मुकाबले 2.50 MB), जिसका कारण अनुभाग 7.5 में समझाया गया है; यही वह मामला है जिसमें अन्य फ़िल्टर अपनी जगह अर्जित करते हैं।11.3 सामान्य डेटा
| 24,443,483 | 45.6 s | 1.8 s | |
| 25,862,475 | 36.2 s |
| |
| 26,002,812 | 26.7 s |
| |
| 26,536,863 | 16.7 s | 1.5 s | |
| 26,814,023 | 13.5 s |
| |
| 30,329,965 | 2.0 s |
| |
| 36,266,743 | 0.9 s | 0.8 s | |
| 50,851,230 | 14.8 s |
| |
| 50,974,773 | 9.7 s | 2.3 s |

अधिकतम स्तर: nikpak RAR के सर्वोत्तम से 5.5 % छोटा आर्काइव बनाता है (25.9 के मुकाबले 24.4 MB)। इस स्तर पर RAR तेज़ है (45.6 s के मुकाबले 26.7 से 36.2 s)। समान आकार: nikpak -m4RAR के डिफ़ॉल्ट सॉलिड स्तर के लगभग 1 % के भीतर है, समय के 81 % में (16.7 s के मुकाबले 13.5 s)।तेज़ स्तर: -m2अनुपात की कीमत पर गति देता है: RAR सॉलिड-m3से 18 गुना तेज़, और 37 % बड़ा। यह बैकअप और पाइपलाइनों के लिए स्तर है जहाँ अंतिम कुछ मेगाबाइट से अधिक समय मायने रखता है।सॉलिड नहीं: इस बहुत-छोटी-फ़ाइलों वाले डेटा पर RAR के डिफ़ॉल्ट (नॉन-सॉलिड) आर्काइव उसके सॉलिड आर्काइवों से लगभग दोगुने बड़े हैं। nikpak की RAR से तुलना करने वाले किसी भी व्यक्ति को RAR में -sजोड़ना चाहिए।
11.4 एक बड़ी मीडिया फ़ाइल पर गति

| 1.45 s (-m2) | 2.54 s (-m3) | ||
| 3.14 s (-m5) | 5.87 s (-m5) | ||
| 0.28 s | 0.23 s |
11.5 एन्क्रिप्शन ओवरहेड
11.6 परिणाम दोहराना
# media: which filter wins, per file
nikpak mt song.wav tracker.mod photo.bmp
# archive with nikpak and RAR, then compare
nikpak a -q -ep -m2 test.nik *.wav
rar a -ep -m5 -ma5 test.rar *.wav
# fair comparison on many files: give RAR solid mode
rar a -r -s -m5 -ma5 -md256m data.rar data
nikpak a -m5 data.nik data
# verify
nikpak x -o+ test.nik restore\
11.7 दूसरा रन: nikpak, RAR 7, 7-Zip और ZIP
विधि
परीक्षण सामग्री
| 8 | 6,987,840 | ||
| 16 | 2,252,604 | ||
| 35 | 2,991,820 | ||
| 4 × 1 | 53,417,226 | ||
| 18 | 11,793,318 | ||
| 60 | 39,100,915 | ||
| 11,473 | 190,454,632 |
अधिकतम स्तर: आर्काइव आकार
| 6,987,840 | 3,557,350 | 4,394,310 | 4,195,043 | 4,974,680 | |
| 2,252,604 | 1,127,607 | 1,264,245 | 1,166,855 | 1,408,085 | |
| 2,991,820 | 1,346,484 | 1,596,971 | 1,484,879 | 1,852,279 | |
| 17,760,408 | 8,731,989 | 10,460,042 | 10,666,922 | 15,225,764 | |
| 4,440,136 | 2,458,867 | 2,797,026 | 2,784,080 | 3,736,722 | |
| 2,220,090 | 606,840 | 725,416 | 642,341 | 836,989 | |
| 28,996,592 | 18,198,056 | 21,229,465 | 25,542,036 | 26,980,770 | |
| 11,793,318 | 2,741,898 | 3,519,622 | 3,259,868 | 4,223,579 | |
| 39,100,915 | 6,887,729 | 11,186,217 | 10,085,779 | 17,399,998 | |
| 190,454,632 | 28,175,618 | 33,606,893 | 28,879,398 | 62,198,510 |

तेज़ स्तर: आकार और निर्माण समय
| 54.0 % · 0.39 s | 63.0 % · 2.09 s | 60.1 % · 3.51 s | 71.2 % · 0.35 s | |
| 52.4 % · 0.61 s | 56.2 % · 0.43 s | 51.9 % · 0.69 s | 62.7 % · 0.10 s | |
| 51.1 % · 0.41 s | 53.6 % · 0.71 s | 49.6 % · 1.96 s | 61.9 % · 0.24 s | |
| 49.2 % · 1.72 s | 59.9 % · 3.60 s | 60.1 % · 14.03 s | 85.7 % · 0.82 s | |
| 55.4 % · 0.58 s | 64.1 % · 0.95 s | 62.7 % · 2.14 s | 84.2 % · 0.22 s | |
| 27.4 % · 0.77 s | 33.3 % · 0.52 s | 28.9 % · 2.13 s | 38.2 % · 0.32 s | |
| 62.8 % · 2.06 s | 73.6 % · 7.54 s | 88.1 % · 13.54 s | 93.0 % · 1.19 s | |
| 35.2 % · 0.11 s | 30.4 % · 5.53 s | 27.7 % · 11.76 s | 36.0 % · 0.89 s | |
| 38.0 % · 0.22 s | 29.5 % · 8.25 s | 26.2 % · 21.85 s | 44.7 % · 1.83 s | |
| 25.3 % · 1.67 s | 18.0 % · 48.19 s | 17.0 % · 93.71 s | 32.9 % · 7.32 s |
सामान्य डेटा विस्तार से
| 28,175,618 | 14.8 % | 154.3 s | 5.6 s | |
| 28,879,398 | 15.2 % | 120.9 s | 6.0 s | |
| 32,350,575 | 17.0 % | 73.6 s | 7.0 s | |
| 32,375,802 | 17.0 % | 93.7 s | 4.5 s | |
| 33,295,133 | 17.5 % | 37.8 s | 3.3 s | |
| 33,606,893 | 17.6 % | 72.4 s | 6.7 s | |
| 34,236,198 | 18.0 % | 48.2 s | 5.9 s | |
| 48,229,284 | 25.3 % | 1.7 s | 0.9 s | |
| 56,038,351 | 29.4 % | 20.2 s | 6.9 s | |
| 62,198,510 | 32.7 % | 28.2 s | 6.9 s | |
| 62,672,415 | 32.9 % | 7.3 s | 5.4 s |

1.1.0 से 1.2.0 तक
| 3,306,819 | 2,741,898 | 3,259,868 | ||
| 10,417,750 | 6,887,729 | 10,085,779 | ||
| 31,322,041 | 28,175,618 | 28,879,398 |
परिणामों को ईमानदारी से पढ़ना
nikpak -m5 हर सेट पर सबसे छोटा है। 7-Zip -mx9 के मुकाबले यह 2.4 से 31.7 % छोटा है, RAR 7 -m5 के मुकाबले 10.8 से 38.4 % और ZIP -9 के मुकाबले 19.9 से 60.4 %। रिकॉर्ड किए गए ऑडियो पर NAC वह पूर्वानुमान करता है जो LZ-आधारित कंप्रेसर केवल मिला सकते हैं: 24-बिट संगीत पर 7-Zip 12 % और nikpak 37 % बचाता है। ऑफ़िस फ़ाइलें: 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 के लिए इसका क्या अर्थ है
12 nikpak और RAR की तुलना
12.1 nikpak कहाँ आगे है
-hp स्विच चाहिए | ||
12.2 RAR कहाँ आगे है
| 45.6 s | ||
| 0.28 s | ||
12.3 क्वांटम प्रतिरोध परिप्रेक्ष्य में
12.4 किसे चुनें
ऑडियो, छवियों, ट्रैकर संगीत और स्रोत कोड के आर्काइवों के लिए nikpak चुनें जहाँ आकार और गति मायने रखते हैं, स्क्रिप्टेड बैकअप के लिए, मज़बूत डिफ़ॉल्ट एन्क्रिप्शन के लिए, और जब कोई खुला, दस्तावेज़ित प्रारूप मूल्यवान हो। RAR चुनें जब आपको रिकवरी रिकॉर्ड, मल्टी-वॉल्यूम या स्व-निष्कर्षण आर्काइव, इन-प्लेस अपडेट चाहिए, या उन लोगों से आर्काइव अदला-बदली करनी है जिनके पास केवल RAR टूल हैं। दोनों उपयोग करें: कोई भी चीज़ किसी वर्कफ़्लो को बल्क मीडिया और एन्क्रिप्टेड बैकअप के लिए nikpak और वितरण के लिए RAR रखने से नहीं रोकती।
12.5 और 7-Zip और ZIP?
सबसे छोटे आर्काइव के लिए 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
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 और Build Tools for Visual Studio को Desktop development with C++ वर्कलोड के साथ स्थापित करें। फिर, स्रोतों वाले फ़ोल्डर में:.\build.ps1 # builds dist\nikpak.exe and dist\unNik.exe
.\build.ps1 -Test # runs the unit tests first
# if PowerShell refuses to run scripts:
powershell -ExecutionPolicy Bypass -File .\build.ps1
build.ps1 जाँचता है कि Cargo स्थापित है (और नहीं होने पर बताता है कि कैसे स्थापित करें), बिल्ड चलाता है, विफल होने पर सामान्य कारण समझाता है, और एग्ज़िक्यूटेबल को dist\nikpak.exe में कॉपी करता है।Windows इंस्टॉलर
.\build.ps1 -Installer (या npm run installer) Inno Setup 6.3 या नया से सेटअप प्रोग्राम dist\nikpak--setup.exe भी बनाता है (इसे एक बार 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 स्थापित करता है। यह एक स्टार्ट मेन्यू प्रविष्टि, एक वैकल्पिक डेस्कटॉप आइकन और, अनुरोध पर, कमांड लाइन के लिए फ़ोल्डर को PATH में जोड़ता है। यह Settings > Apps में एक अनइंस्टॉलर पंजीकृत करता है। शॉर्टकट: स्टार्ट मेन्यू में NikPak, unNik और लाइसेंस; डेस्कटॉप पर NikPak (हमेशा) और डेस्कटॉप पर unNik विकल्प के रूप में। .nik फ़ाइलें हमेशा पंजीकृत होती हैं (1.5.2 से): उन्हें अपना आइकन मिलता है (nikfile.ico, ज़िपर वाला एक पृष्ठ, जैसे .zip फ़ाइलें), प्रकार नाम "NikPak archive", और डबल-क्लिक उन्हें unNik में खोलता है (राइट-क्लिक मेन्यू में "unNik के साथ खोलें")। unNik "इसके साथ खोलें" और Default apps में भी सूचीबद्ध होता है। अनइंस्टॉलर पंजीकरण हटा देता है। यदि .nik फ़ाइलें पहले से किसी अन्य प्रोग्राम से खोलने के लिए सेट हैं, तो Windows वह चुनाव तब तक रखता है जब तक unNik एक बार "इसके साथ खोलें" में नहीं चुना जाता। अंतिम "NikPak लॉन्च करें" NikPak को सामान्य उपयोगकर्ता के रूप में शुरू करता है, कभी व्यवस्थापक के रूप में नहीं, ताकि ड्रैग और ड्रॉप काम करे। अपडेट पिछले संस्करण पर स्थापित होते हैं (स्थिर AppId)। %APPDATA%\nikpak में लाइसेंस अपडेट और अनइंस्टॉल पर रखा जाता है। सेटअप में कभी कुंजियाँ या कुंजी फ़ाइलें नहीं होतीं। इंस्टॉलर Windows का अनुसरण करते हुए English या French में चलता है। प्रकाशन से पहले, nikpak.exe और सेटअप को कोड-साइनिंग प्रमाणपत्र से हस्ताक्षरित करें, ताकि Windows SmartScreen किसी अज्ञात प्रकाशक के बारे में चेतावनी न दे।
nikpak.exe, unNik.exe, दोनों सेटअप और SHA256SUMS.txt — उन्हें binaries\ में कॉपी करता है, वेब साइट फिर से बनाता है और FTP से अपलोड करता है (-NoUpload अपलोड छोड़ देता है)। दूसरा सेटअप, unnik--setup.exe (installer\unnik.iss), अकेले unNik, निःशुल्क आर्काइव ब्राउज़र, स्थापित करता है; जब NikPak पहले से स्थापित है तो यह केवल प्रोग्राम स्थापित करता है, ताकि मेन्यू कभी दोहरे न हों।13.2 npm से बिल्ड करना
package.json है जिसकी स्क्रिप्टें बस Cargo बुलाती हैं, ताकि Node.js वर्कफ़्लो में रहने वाला डेवलपर परिचित कमांड टाइप कर सके:npm run build # cargo build --release
npm run dist # build.ps1 -> dist\nikpak.exe
npm test # cargo test --release
npm run clean # cargo clean
13.3 एक स्व-निहित एग्ज़िक्यूटेबल
.cargo/config.toml Windows MSVC लक्ष्यों के लिए C रनटाइम को स्थिर रूप से लिंक करती है। इसलिए परिणामी nikpak.exe (ग्राफ़िकल इंटरफ़ेस के साथ कई MB, बिना उसके लगभग 2.3 MB) की कोई DLL निर्भरता नहीं होती और जिन मशीनों पर चलता है वहाँ Visual C++ Redistributable की आवश्यकता नहीं होती। इसे कहीं भी उपयोग करने के लिए PATH के किसी फ़ोल्डर में कॉपी करें। रिलीज़ प्रोफ़ाइल छोटे, तेज़ बाइनरी के लिए पूर्ण अनुकूलन, लिंक-टाइम अनुकूलन, एकल कोड-जनरेशन इकाई, प्रतीक हटाना और panic = abort सक्षम करती है।13.4 macOS और Linux
./build.sh # builds and copies the result to dist/nikpak
# or: cargo build --release
sudo cp dist/nikpak /usr/local/bin/
xcode-select --install); Debian या Ubuntu पर एक C कंपाइलर स्थापित करें (sudo apt install build-essential)। Rust स्वयं curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh से आता है। संपीड़न लाइब्रेरी Cargo द्वारा उसके C स्रोतों से संकलित होती है, इसलिए कोई सिस्टम लाइब्रेरी आवश्यक नहीं।./package-unix.sh से बनते हैं, जो nikpak और unNik बनाता है और उन्हें एक install.sh के साथ binaries\nikpak--macos.zip (एक यूनिवर्सल बाइनरी: Intel + Apple silicon) या binaries\nikpak--linux-.tar.gz में पैक करता है। Linux पर ZIG=1 सेट करके cargo-zigbuild से glibc 2.28 के विरुद्ध बिल्ड करें, ताकि प्रोग्राम पुराने वितरणों पर भी चलें।13.5 निर्भरताएँ
Cargo.lock में स्थिर हैं, जो स्रोत पैकेज का हिस्सा है, इसलिए हर बिल्ड वही कोड उपयोग करता है।zstd | |
chacha20poly1305 | |
argon2 | |
rand | |
zeroize | |
rpassword | |
crc32fast | |
glob | |
liblzma | |
ppmd-rust | |
preflate-rs | |
eframe / egui | |
rfd | |
ed25519-dalek | |
rustybuzz, unicode-bidi |
13.6 स्क्रिप्टिंग
$archive = "D:\Backups\docs-$(Get-Date -Format yyyy-MM-dd).nik"
# the password comes from a file or secret store, not from the script
$env:NIKPAK_PASSWORD = Get-Content "$env:USERPROFILE\.nikpak-secret"
nikpak a -p -m3 -inul $archive "$env:USERPROFILE\Documents"
if ($LASTEXITCODE -gt 1) { throw "nikpak failed: $LASTEXITCODE" }
nikpak t -inul $archive # verify what was written
if ($LASTEXITCODE -ne 0) { throw "archive verification failed" }
export NIKPAK_PASSWORD="$(cat ~/.nikpak-secret)"
nikpak a -p -m3 -inul "backup-$(date +%F).nik" ~/Documents || [ $? -eq 1 ]
nikpak lb backup-2026-10-16.nik | grep -i '\.wav$'
13.7 Total Commander
nik पंजीकृत करें; पैकिंग के लिए a और अनपैकिंग के लिए x उपयोग करें; लंबी फ़ाइल सूचियों के लिए फ्रंट-एंड को @listfile भेजने दें; अनअटेंडेड निष्कर्षण के लिए -o+ या -y दें; और पासवर्ड -p या NIKPAK_PASSWORD वेरिएबल से दें, क्योंकि ग्राफ़िकल फ्रंट-एंड के पास संकेत देने के लिए कोई कंसोल नहीं होता।14 परीक्षण और सत्यापन
14.1 यूनिट परीक्षण
cargo test --release से चलते हैं:
14.2 एंड-टू-एंड परीक्षण
हर बेंचमार्क आर्काइव निकाला गया और उसके स्रोत से बाइट-दर-बाइट मिलाया गया (10,949-फ़ाइल सेट के लिए SHA-256), कई स्तरों पर। एक मिश्रित आर्काइव (WAV, MOD, BMP, टेक्स्ट, यादृच्छिक डेटा, उपफ़ोल्डर) बनाया, सूचीबद्ध, परीक्षण और पूरी तरह निकाला गया, और उसके बीच से एक एकल फ़ाइल निकाली गई। वही आर्काइव एन्क्रिप्शन के साथ बनाया गया, सही और गलत पासवर्ड से परीक्षण किया गया, और निकाला गया। पिछले प्रारूप संस्करण (1.0) द्वारा लिखे आर्काइव 1.1 ने खोले। इंटरैक्टिव पासवर्ड प्रविष्टि एक छद्म-टर्मिनल से अभ्यासित की गई: मेल खाते पासवर्ड, बेमेल, खाली प्रविष्टि (निर्माण), खोलने पर सही और गलत पासवर्ड।
14.3 हमला परीक्षण
14.4 परीक्षण से मिले दोष
15 सीमाएँ और रोडमैप
15.1 वर्तमान सीमाएँ
-o+ से अधिलेखित करें। | |
-m4 और -m5 आर्काइव 128 MiB विंडो उपयोग करते हैं; उन्हें डीकंप्रेस करने के लिए उतनी मेमोरी चाहिए। | |
Single-threaded and the slowest level. Creating needs up to about 1.1 GB of memory, extracting up to about 350 MB. | |
cargo test --release चलाएँ। |
15.2 रोडमैप
Cargo.lock को रिपॉज़िटरी में रखें ताकि बिल्ड पुनरुत्पादनीय हों, और अपने समर्थित हर प्लेटफ़ॉर्म के निरंतर-एकीकरण जॉब में cargo test --release चलाएँ।A परिशिष्ट A: प्रारूप स्थिरांक और सीमाएँ
89 4E 49 4B 0D 0A 1A 0A | |
u32 बिग-एंडियन लंबाई | |
-mt) |
B परिशिष्ट B: शब्दावली