نظرة عامة
يسهل Aspose.ZIP عددًا من العمليات المتعلقة بتشفير وفك تشفير الأرشيفات. باستخدام Aspose.Zip API لـ Java، يمكنك تشفير وفك تشفير أرشيفات ZIP وRAR و7-Zip بسرعة.تشفير/فك تشفير ملفات ZIP
هناك طريقتان متاحتان لتشفير أرشيفات ZIP : الطريقة التقليدية، التي تعتبر الآن ضعيفة، وطريقة AES الحديثة. يسمح معيار ZIP بتشفير أي إدخال بأي من الطريقتين، حتى داخل أرشيف ZIP نفسه. يوفر تشفير AES أمانًا أقوى ويتوفر بأطوال مفاتيح مختلفة (128 بت و192 بت و256 بت). يوفر هذا حماية أفضل للبيانات الحساسة المخزنة في أرشيفات ZIP.
تشفير ملف ZIP باستخدام طريقة الانكماش
try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
try (FileInputStream source = new FileInputStream("alice29.txt")) {
Archive archive = new Archive(new ArchiveEntrySettings(CompressionSettings.getDeflate(), new TraditionalEncryptionSettings("p@s$S")));
archive.createEntry("alice29.txt", source);
archive.save(zipFile);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
يقوم هذا الرمز بإنشاء أرشيف ZIP باسم "archive.zip" باستخدام طريقة الضغط Deflate وتشفير ZIP التقليدي. ويحقق ذلك عن طريق فتح دفق إخراج جديد للأرشيف أولاً باستخدام تجربة FileOutputStream. يعمل مصدر FileInputStream بمثابة دفق الإدخال للملف المصدر "alice29.txt" الذي سيتم إضافته إلى الأرشيف. بعد ذلك، يتم إنشاء كائن أرشيف، مع تحديد كل من طريقة ضغط الانكماش والتشفير التقليدي. تم تعيين كلمة المرور للتشفير على "p@s$S". يعالج بيان الصيد أي استثناءات قد تنشأ أثناء عمليات الملف أو الأرشيف، ويطبع رسالة خطأ إلى وحدة التحكم.
تشفير ZIP باستخدام طريقة AES
try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
try (FileInputStream source = new FileInputStream("alice29.txt")) {
try (Archive archive = new Archive(new ArchiveEntrySettings(CompressionSettings.getDeflate(), new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256)))) {
archive.createEntry("alice29.txt", source);
archive.save(zipFile);
}
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
يقوم هذا الرمز بإنشاء أرشيف ZIP باسم "archive.zip" باستخدام طريقة الضغط Deflate ويقوم بتشفير البيانات باستخدام خوارزمية AES-256 القوية.
بالنسبة لهذه العينات، قدمنا مثيلات لـ
EncryptionSetting
داخل
منشئ الأرشيف
. من الممكن تطبيق التشفير لإدخال معين مع ترك الآخرين دون حماية.
باستخدام خوارزمية تشفير ZIP، قم بتشفير الإدخال الثاني من ثلاثة
try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
File source1 = new File("alice29.txt");
File source2 = new File("asyoulik.txt");
File source3 = new File("fields.c");
try (Archive archive = new Archive()) {
archive.createEntry("alice29.txt", source1);
archive.createEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256)));
archive.createEntry("fields.c", source3);
archive.save(zipFile);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
يوضح هذا الرمز إنشاء أرشيف ZIP بثلاثة ملفات إدخال: "alice29.txt"، و"asyoulik.txt"، و"fields.c". بشكل فريد، تتم إضافة الملفين الأول والأخير غير مشفرين، بينما الملف الثاني، "asyoulik.txt"، محمي بكلمة مرور باستخدام تشفير AES-256 بكلمة المرور "p@s$S".
هذا الأسلوب من التشفير الانتقائي الملفات الموجودة في أرشيف ZIP غير شائعة. ومع ذلك، توفر Aspose.Zip API لـ Java وظيفة تشفير إدخالات معينة داخل أرشيف ZIP باستخدام طرق تشفير وكلمات مرور مختلفة. في حين أن هذا يعزز أمن البيانات، ولكنه يعقد عملية إدارة الأرشيف وفك التشفير
تشفير ZIP بطرق وكلمات مرور مختلفة
try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
File source1 = new File("alice29.txt");
File source2 = new File("asyoulik.txt");
File source3 = new File("fields.c");
try (Archive archive = new Archive()) {
archive.createEntry("alice29.txt", source1, false, new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256)));
archive.createEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$D")));
archive.createEntry("fields.c", source3, false, new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$F", EncryptionMethod.AES256)));
archive.save(zipFile);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
يقوم هذا الرمز بإنشاء أرشيف ZIP يحتوي على ثلاثة ملفات مشفرة: "alice29.txt"، و"asyoulik.txt"، و"fields.c". ويتم تشفير كل ملف بطريقة مميزة.
يعكس الجزء الأول وظيفة مثال التعليمات البرمجية السابق. يركز القسم الأساسي على إنشاء إدخالات داخل الأرشيف لكل ملف. تشير هذه الإدخالات إلى أسمائها وملفاتها المصدر (كائنات الملفات). يتم تطبيق التشفير بطرق مختلفة:
- "alice29.txt" : تشفير AES-256 بكلمة المرور "p@s$S"
- "asyoulik.txt" : تقليدي طريقة التشفير بكلمة المرور "p@s$D"
- "fields.c" : تشفير AES-256 بكلمة المرور "p@s$F"
تشفير أرشيف ZIP الموجود
try (Archive archive = new Archive("plain.zip")) {
ArchiveSaveOptions options = new ArchiveSaveOptions();
options.setEncryptionOptions(new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256));
archive.save("encrypted.zip", options);
}
يأخذ هذا الرمز أرشيف "plain.zip" موجود، ويطبق عليه تشفير AES بكلمة المرور "p@s$S"، ويحفظه كأرشيف جديد باسم "encrypted.zip"
فك تشفير ملف مضغوط بكلمة مرور
try (Archive archive = new Archive("source.zip")) {
archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
}
يستخرج هذا الرمز الإدخال الأول من أرشيف "source.zip" ويحفظه كملف باسم "first_entry.bin" باستخدام كلمة المرور "p@s$S".
يتوفر للمستخدم خيار فك تشفير إما إدخال محدد داخل أرشيف ZIP المشفر أو الأرشيف بأكمله ككل.
فك تشفير ملف ZIP بالكامل
ArchiveLoadOptions options = new ArchiveLoadOptions();
options.setDecryptionPassword("p@s$S");
try (Archive archive = new Archive("source.zip", options)) {
archive.extractToDirectory("destination");
}
في هذه الحالة نحن بحاجة إلى توفير كلمة المرور داخل المنشئ.
تشفير/فك تشفير ملف RAR باستخدام Java
لا يوفر Aspose.ZIP وظيفة إنشاء
أرشيفات RAR
؛ فهو يدعم الاستخراج فقط. يمكن تشفير أرشيف RAR، مع خيار حماية أسماء الملفات أم لا.
في السيناريو السابق، يجب على المستخدم توفير كلمة مرور فك التشفير داخل كائن
RarArchiveLoadOptions
عند تهيئة الكائن أرشيف رار. وفي الحالة الأخيرة، يمكن توفير كلمة المرور أثناء استخراج الإدخالات الفردية.
فك تشفير ملف RAR بأسماء الملفات المشفرة
RarArchiveLoadOptions options = new RarArchiveLoadOptions();
options.setDecryptionPassword("p@s$S");
try (RarArchive archive = new RarArchive("source.rar", options)) {
archive.extractToDirectory("destination");
}
يقوم هذا الكود بفك تشفير واستخراج محتويات أرشيف "source.rar" إلى مجلد "الوجهة". إذا كان الأرشيف مشفرًا، فإنه يستخدم كلمة مرور فك التشفير المحددة.
فيما يلي تفصيل لكيفية عمله:
- إعدادات التحميل باستخدام كلمة مرور فك التشفير: أولاً، يقوم بإنشاء كائن إعدادات تحميل للملف أرشيف RAR باستخدام عامل تشغيل الخيارات RarArchiveLoadOptions. ثم يقوم بتعيين كلمة مرور فك التشفير للأرشيف باستخدام طريقة options.setDecryptionPassword.
- فتح الأرشيف المشفر: يفتح السطر التالي أرشيف "source.rar" للقراءة والتحرير باستخدام ملف محاولة استخدام الموارد البناء. فهو يحدد كائن الخيارات بكلمة مرور فك التشفير للتعامل مع الأرشيفات المشفرة.
- استخراج محتويات الأرشيف: أخيرًا، يقوم الأسلوب archive.extractToDirectory باستخراج محتويات الأرشيف الذي تم فك تشفيره إلى "الوجهة" المجلد.
فك تشفير ملف RAR المستهدف
try (RarArchive archive = new RarArchive("source.rar")) {
archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
}
يحاول مقتطف الكود هذا استخراج الإدخال الأول من أرشيف RAR "source.rar" وحفظه باسم "first_entry.bin"، باستخدام كلمة مرور فك التشفير "p@s$S" إذا كان الأرشيف مشفرًا.
فك تشفير محتوى إدخال RAR محدد (الدفق)
ByteArrayOutputStream destination = new ByteArrayOutputStream();
try (RarArchive archive = new RarArchive("source.rar")) {
try (InputStream source = archive.getEntries().get(1).open("p@s$S")) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = source.read(buffer, 0, buffer.length)) > 0) {
destination.write(buffer, 0, bytesRead);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}
يستهدف مقتطف الكود هذا إدخالاً محددًا داخل أرشيف RAR. فهو يقوم بفك تشفير محتوى الإدخال وتدفقه مباشرة إلى الذاكرة، بافتراض تشفير بيانات الإدخال فقط، وليس أسماء الملفات نفسها.
وصف كامل لما يفعله الرمز:
- تهيئة المخزن المؤقت للذاكرة : يتم إنشاء الوجهة المسماة ByteArrayOutputStream لتكون بمثابة مخزن مؤقت في الذاكرة لتخزين المحتوى الذي تم فك تشفيره للإدخال المستهدف.
- الوصول إلى الأرشيف والإدخال: يستخدم الرمز تجربة مع - كتلة الموارد لفتح أرشيف RAR المصدر "source.rar". داخل كتلة أخرى للتجربة مع الموارد، تقوم باسترداد تدفق الإدخال للإدخال الثاني وفك تشفيره باستخدام كلمة المرور "p@s$S".
- فك التشفير والبث: البايتات التي تم فك تشفيرها تتم قراءتها من دفق الإدخال في أجزاء باستخدام المخزن المؤقت. ثم تتم كتابة كل قطعة إلى الوجهة ByteArrayOutputStream حتى تتم معالجة جميع البيانات.
- معالجة الأخطاء: يشتمل الكود على كتلة التقاط للتعامل معها أي استثناءات IOExceptions محتملة قد تنشأ أثناء عملية فك التشفير أو البث. في حالة حدوث خطأ، تتم طباعة رسالة الخطأ إلى دفق الخطأ القياسي لأغراض التصحيح.
تشفير وفك تشفير ملف 7-ZIP باستخدام Java
سيتم تنفيذه في Aspose.ZIP لإصدار Java 24.4. خيار تشفير أرشيف 7z الوحيد هو AES.
تشفير وضغط ملف 7-Zip باستخدام LZMA2
using (FileStream szFile = File.Open("archive.7z", FileMode.Create))
{
FileInfo source1 = new FileInfo("alice29.txt");
FileInfo source2 = new FileInfo("asyoulik.txt");
FileInfo source3 = new FileInfo("fields.c");
using (var archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("p@s$S"))))
{
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik.txt", source2);
archive.CreateEntry("fields.c", source3);
archive.Save(szFile);
}
}
تدعم أرشيفات 7Z القدرة على تشفير كل إدخال بكلمة مرور خاصة به أو تركه بدون حماية. يقوم هذا الكود بإنشاء أرشيف 7z جديد مع ضغط وتشفير LZMA2 وAES.
- فتح الملف: يتم استخدام FileStream لفتح ملف جديد يسمى "archive.7z" في وضع الإنشاء.
- تهيئة الكائنات: يتم إنشاء ثلاثة كائنات FileInfo للملفات "alice29.txt" و"asyoulik.txt" و"fields.c".
- إنشاء ملف 7-zip: يتم إنشاء كائن SevenZipArchive باستخدام:
- LZMA2 إعدادات الضغط.
- إعدادات تشفير AES باستخدام كلمة المرور "p@s$S" - إضافة ملفات: يتم استخدام أساليب CreateEntry لإضافة كل ملف إلى الأرشيف من ملف منفصل. مصدر.
- حفظ الأرشيف: يتم حفظ الأرشيف في دفق الملفات szFile باستخدام طريقة الحفظ. </لي>
التشفير الانتقائي في أرشيف 7z
using (FileStream szFile = File.Open("archive.7z", FileMode.Create))
{
FileInfo source1 = new FileInfo("alice29.txt");
FileInfo source2 = new FileInfo("asyoulik.txt");
FileInfo source3 = new FileInfo("fields.c");
using (var archive = new SevenZipArchive())
{
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik.txt", source2, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("p@s$S")));
archive.CreateEntry("fields.c", source3, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("$ecret")));
archive.Save(szFile);
}
}
يقوم هذا الكود بإنشاء أرشيف 7z يحتوي على ثلاثة ملفات: "alice29.txt"، و"asyoulik.txt"، و"fields.c". يتم ضغط الملفين الأخيرين وتشفيرهما باستخدام كلمات مرور مختلفة.
بخلاف الكود السابق، يتم استخدام الأسلوب archive.CreateEntry على كائن الأرشيف لإنشاء إدخالات لكل ملف. عند إنشاء إدخال "asyoulik.txt" من كائن source2 FileInfo، يتم تعيين المعلمة الثالثة لـ CreateEntry على false. يشير هذا إلى أنه سيتم استخدام إعدادات الضغط والتشفير المخصصة، المحددة في المعلمة الرابعة (كائن SevenZipEntrySettings). في هذه الحالة، تحدد الإعدادات ضغط "Zip LZMA2" وتشفير "Zip AES" بكلمة المرور "p@s$S".
كما هو الحال مع ZIP، يمكن للمستخدم فك تشفير الأرشيف بأكمله أو إدخال معين منه.
يمكن تشفير
7Z archive
باستخدام الحماية أو بدونها أسماء الملفات. إذا كانت أسماء الملفات مشفرة، فستحتاج إلى توفير كلمة المرور
عند إنشاء مثيل للأرشيف
.
فك التشفير 7z مع أسماء الملفات المشفرة
try (SevenZipArchive archive = new SevenZipArchive("archive.7z", "p@s$S")) {
archive.extractToDirectory("C:\\extracted");
}
يستخدم هذا الرمز كتلة Try-with-resources لفتح أرشيف 7z باسم "archive.7z" محمي بكلمة المرور "p@s$S". ثم يقوم باستخراج محتويات الأرشيف إلى المجلد "C:\extracted".
سواء كانت أسماء الملفات مشفرة أم لا، فمن الآمن توفير كلمة المرور داخل عملية استخراج المنشئ. لن يعمل النموذج أدناه إلا عندما يكون المحتوى محميًا فقط.
فك تشفير إدخال محدد 7z
try (SevenZipArchive archive = new SevenZipArchive("archive.7z")) {
archive.getEntries().get(0).extract("data.bin", "p@s$S");
}
يستخدم هذا الرمز كتلة Try-with-resources لفتح أرشيف 7z باسم "archive.7z" محمي بكلمة المرور "p@s$S". ثم يقوم باستخراج محتويات الأرشيف إلى المجلد "C:\extracted".
سواء كانت أسماء الملفات مشفرة أم لا، فمن الآمن توفير كلمة المرور داخل عملية استخراج المنشئ. لن يعمل النموذج أدناه إلا عندما يكون المحتوى محميًا فقط.
واجهة برمجة تطبيقات ضغط Java المدعومة الأخرى
استخدم مكتبة Aspose.ZIP Java لتحويل مستندات الملفات المضغوطة ودمجها وتحريرها واستخراج البيانات من الأرشيفات والمزيد!
Support and Learning Resources
- Learning Resources
- Documentation
- Source Code
- API References
- Tutorial Videos
- Product Support
- Free Support
- Paid Support
- Blog
- Release Notes
- Why Aspose.ZIP for Java?
- Customers List
- Success Stories