दिलचस्प पोस्ट
आंतरिक मेमोरी पर खाली स्थान प्राप्त करें आर में डुप्लिकेट मान खोजें PHP भाजित सीमांकित स्ट्रिंग में कुंजी / वैल्यू जोड़े (एसोसिएटेटेड अर्रे) ओ (एन) की तुलना में खोज- min / find-max अधिक कुशल के साथ स्टैक? संशोधन संख्या के लिए Git बराबर क्या है? 5 साल बाद, क्या "सबसे तेज़ संभावित सी ++ प्रतिनिधि" से बेहतर कुछ है? रजिस्ट्री कुंजी को खोलने में जावा त्रुटि जावा आदेशित मानचित्र स्काला पर मैं कैसे टाइप एरीर पर हूं? या, मैं अपने संग्रह के प्रकार पैरामीटर क्यों नहीं प्राप्त कर सकता हूं? जावास्क्रिप्ट में प्रारूप / सुव्यवस्थित / सुव्यवस्थित कैसे करें मैं विंडोज 7 में एक फ़ोल्डर में लिखने के लिए asp.net अनुमति कैसे दे सकता हूँ? MySQL में प्रकार: बिगइंत (20) बनाम Int (20) दिनांक प्रारूप जेसनसन जैक्सन के लिए मैपिंग क्या मैक पर "वॉच" या "इनॉटिफाइवेट" जैसी कोई आज्ञा है? .NET अनुप्रयोग के लिए उपयोगकर्ता सेटिंग्स को स्टोर करने का सबसे अच्छा तरीका क्या है?

जावा में पासवर्ड सुरक्षित ज़िप फ़ाइल

मैंने जावा फ़ाइल को स्निपेट के नीचे के रूप में बनाया है

import java.io.*; import java.util.zip.*; public class ZipCreateExample { public static void main(String[] args) throws IOException { System.out.print("Please enter file name to zip : "); BufferedReader input = new BufferedReader (new InputStreamReader(System.in)); String filesToZip = input.readLine(); File f = new File(filesToZip); if(!f.exists()) { System.out.println("File not found."); System.exit(0); } System.out.print("Please enter zip file name : "); String zipFileName = input.readLine(); if (!zipFileName.endsWith(".zip")) zipFileName = zipFileName + ".zip"; byte[] buffer = new byte[18024]; try { ZipOutputStream out = new ZipOutputStream (new FileOutputStream(zipFileName)); out.setLevel(Deflater.DEFAULT_COMPRESSION); FileInputStream in = new FileInputStream(filesToZip); out.putNextEntry(new ZipEntry(filesToZip)); int len; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } out.closeEntry(); in.close(); out.close(); } catch (IllegalArgumentException iae) { iae.printStackTrace(); System.exit(0); } catch (FileNotFoundException fnfe) { fnfe.printStackTrace(); System.exit(0); } catch (IOException ioe) { ioe.printStackTrace(); System.exit(0); } } } 

अब मैं चाहता हूं कि जब मैं ज़िप फ़ाइल पर क्लिक करता हूं, तो मुझे पासवर्ड टाइप करने के लिए संकेत चाहिए और फिर ज़िप फ़ाइल को डीकंप्रेस करना चाहिए। कृपया कोई मदद, मुझे आगे कैसे जाना चाहिए?

वेब के समाधान से एकत्रित समाधान "जावा में पासवर्ड सुरक्षित ज़िप फ़ाइल"

मानक जावा एपीआई पासवर्ड सुरक्षित ज़िप फ़ाइलों का समर्थन नहीं करता है सौभाग्य से अच्छे लोग ने पहले ही हमारे लिए इस तरह की क्षमता को लागू किया है। कृपया इस लेख पर एक नज़र डालें जो बताता है कि पासवर्ड से सुरक्षित ज़िप कैसे बनायें: http://java.sys-con.com/node/1258827

Zip4j पर आधारित निम्न कोड Zip4j :

 import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.util.Zip4jConstants; import org.apache.commons.io.FilenameUtils; import java.io.File; public class Zipper { private String password; private static final String EXTENSION = "zip"; public Zipper(String password) { this.password = password; } public void pack(String filePath) throws ZipException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_ULTRA); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); zipParameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); zipParameters.setPassword(password); String baseFileName = FilenameUtils.getBaseName(filePath); String destinationZipFilePath = baseFileName + "." + EXTENSION; ZipFile zipFile = new ZipFile(destinationZipFilePath); zipFile.addFile(new File(filePath), zipParameters); } public void unpack(String sourceZipFilePath, String extractedZipFilePath) throws ZipException { ZipFile zipFile = new ZipFile(sourceZipFilePath + "." + EXTENSION); if (zipFile.isEncrypted()) { zipFile.setPassword(password); } zipFile.extractAll(extractedZipFilePath); } } 

FilenameUtils Apache Commons IO से है Apache Commons IO

उदाहरण उपयोग:

 public static void main(String[] arguments) throws ZipException { Zipper zipper = new Zipper("password"); zipper.pack("encrypt-me.txt"); zipper.unpack("encrypt-me", "D:\\"); } 

नीचे दिए गए नमूना कोड ज़िप और पासवर्ड आपकी फ़ाइल की रक्षा करेगा। यह रीस्ट सेवा मूल फ़ाइल के बाइट स्वीकार करता है। यह बाइट सरणी को ज़िप करता है और पासवर्ड उसे बचाता है। तो यह पासवर्ड के रूप में संरक्षित ज़िपित फ़ाइल के बाइट भेजता है। यह कोड एक नमूना भेजने और प्राप्त करने और एक आरईएसटी सेवा से बाइनरी बाइट्स प्राप्त करने का एक नमूना है, और पासवर्ड की रक्षा के साथ फाइल को ज़िप करना भी है बाइट स्ट्रीम से ज़िप किए जाते हैं, इसलिए कोई भी फाइल कभी भी सर्वर पर संग्रहीत नहीं होती है

  • जावा में जर्सी एपीआई का उपयोग करके जेएक्स-आरएस एपीआई का उपयोग करता है
  • ग्राहक जर्सी-क्लाइंट API का उपयोग कर रहा है
  • Zip4j 1.3.2 ओपन सोर्स लाइब्रेरी, और अपाचे कॉमन्स का उपयोग करता है IO
 @PUT @Path("/bindata/protect/qparam") @Consumes(MediaType.APPLICATION_OCTET_STREAM) @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response zipFileUsingPassProtect(byte[] fileBytes, @QueryParam(value = "pass") String pass, @QueryParam(value = "inputFileName") String inputFileName) { System.out.println("====2001==== Entering zipFileUsingPassProtect"); System.out.println("fileBytes size = " + fileBytes.length); System.out.println("password = " + pass); System.out.println("inputFileName = " + inputFileName); byte b[] = null; try { b = zipFileProtected(fileBytes, inputFileName, pass); } catch (IOException e) { e.printStackTrace(); return Response.status(Status.INTERNAL_SERVER_ERROR).build(); } System.out.println(" "); System.out.println("++++++++++++++++++++++++++++++++"); System.out.println(" "); return Response.ok(b, MediaType.APPLICATION_OCTET_STREAM) .header("content-disposition", "attachment; filename = " + inputFileName + ".zip").build(); } private byte[] zipFileProtected(byte[] fileBytes, String fileName, String pass) throws IOException { ByteArrayInputStream inputByteStream = null; ByteArrayOutputStream outputByteStream = null; net.lingala.zip4j.io.ZipOutputStream outputZipStream = null; try { //write the zip bytes to a byte array outputByteStream = new ByteArrayOutputStream(); outputZipStream = new net.lingala.zip4j.io.ZipOutputStream(outputByteStream); //input byte stream to read the input bytes inputByteStream = new ByteArrayInputStream(fileBytes); //init the zip parameters ZipParameters zipParams = new ZipParameters(); zipParams.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); zipParams.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); zipParams.setEncryptFiles(true); zipParams.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); zipParams.setPassword(pass); zipParams.setSourceExternalStream(true); zipParams.setFileNameInZip(fileName); //create zip entry outputZipStream.putNextEntry(new File(fileName), zipParams); IOUtils.copy(inputByteStream, outputZipStream); outputZipStream.closeEntry(); //finish up outputZipStream.finish(); IOUtils.closeQuietly(inputByteStream); IOUtils.closeQuietly(outputByteStream); IOUtils.closeQuietly(outputZipStream); return outputByteStream.toByteArray(); } catch (ZipException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { IOUtils.closeQuietly(inputByteStream); IOUtils.closeQuietly(outputByteStream); IOUtils.closeQuietly(outputZipStream); } return null; } 

नीचे यूनिट का परीक्षण:

 @Test public void testPassProtectZip_with_params() { byte[] inputBytes = null; try { inputBytes = FileUtils.readFileToByteArray(new File(inputFilePath)); } catch (IOException e) { e.printStackTrace(); } System.out.println("bytes read into array. size = " + inputBytes.length); Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://localhost:8080").path("filezip/services/zip/bindata/protect/qparam"); target = target.queryParam("pass", "mypass123"); target = target.queryParam("inputFileName", "any_name_here.pdf"); Invocation.Builder builder = target.request(MediaType.APPLICATION_OCTET_STREAM); Response resp = builder.put(Entity.entity(inputBytes, MediaType.APPLICATION_OCTET_STREAM)); System.out.println("response = " + resp.getStatus()); Assert.assertEquals(Status.OK.getStatusCode(), resp.getStatus()); byte[] zipBytes = resp.readEntity(byte[].class); try { FileUtils.writeByteArrayToFile(new File(responseFilePathPasswordZipParam), zipBytes); } catch (IOException e) { e.printStackTrace(); } } 

उपयोग करने और संशोधित करने के लिए स्वतंत्र महसूस करें कृपया मुझे बताएं अगर आपको कोई त्रुटि मिलती है उम्मीद है की यह मदद करेगा।

1 संपादित करें – प्रश्नपरैम का उपयोग करना, लेकिन आप सादे दृष्टि से पासवुड को छिपाने के बजाय पुट के लिए हेडरपरम का उपयोग कर सकते हैं। तदनुसार परीक्षण विधि को संशोधित करें

2 – रीस्ट पथ को संपादित करें filezip / services / zip / bindata / protect / qparam

फाइलज़िप युद्ध का नाम है वेब। xml में यूआरएल मैपिंग सेवाएं हैं ज़िप वर्ग स्तर का रास्ता एनोटेशन है बिंदता / रक्षा / क्पराराम विधि स्तर का रास्ता एनोटेशन है।

पासवर्ड संरक्षित फ़ाइल बनाने के लिए कोई डिफ़ॉल्ट जावा एपीआई नहीं है यहां यह कैसे करना है इसके बारे में एक और उदाहरण है ।