2017-10-04 3 views
0

Szenario: Datei hochladen als versuchen, zip es mit DotNetZip mit Passwortschutz, Passwort wird mit Membership.GeneratePassword() Methode generiert. Alles funktioniert einwandfrei, außer dass der Benutzer manchmal Dateien mit dem generierten Passwort nicht entpacken kann. Wired Sache ist, dass dies passiert nur manchmal sagen wir 1 von 15 mal. Generieren Passwort:DotNetZip falsches Passwort beim Entpacken

public static String FilePassword() 
{ 
    while (_filePassword.Length < 12) 
    { 
     _filePassword += string.Concat(Membership.GeneratePassword(1, 0).Where(char.IsLetterOrDigit)); 
    } 

    return _filePassword; 
} 

Datei speichern:

if (FileUploadControl.HasFile) 
{ 

    fileName = Path.GetFileName(FileUploadControl.FileName); 
    FileUploadControl.SaveAs(FileSavePath + fileName); 

     // Archive uploaded file to zip. 
     using (ZipFile zip = new ZipFile()) 
     { 
      // File to be archived. 
      var file = FileUploadControl.PostedFile; 

      // Enable encryption of file 
      zip.Encryption = EncryptionAlgorithm.PkzipWeak; 

      // Set password. 
      zip.Password = Settings.FilePassword(); 

      // Set temporary folder path for archive process. 
      zip.TempFileFolder = tempPath; 

      // Add file to archive with its path. 
      zip.AddFile(FileSavePath + file.FileName, ""); 

      File objFile = new File(file.FileName, FileSavePath); 

      // Save zip file with the name as file ID. 
      zip.Save(FileSavePath + file.FileName); 
     } 
} 

ich Passwort angemeldet, während Verfahren zu schaffen, in und auch ZIP-Datei mit einem Passwort, während der Schutz, sie passen immer, ich kann nicht sehen, was falsch ist, warum manchmal Beim Entpacken der Datei wird ein falsches Passwort angezeigt.

+0

Können Sie uns zeigen einige Beispiele von Passwörtern, die Arbeit getan und hat nicht funktioniert? – mjwills

+0

Haben Sie die Zeichenkodierungen der Passwörter überprüft? – Baccata

+0

@mjwills Passwort ist alphanumerisch, einer der Working Pass: vKkowRZBTIxo, funktioniert nicht eins: QjCFFaM9LumZ – Mony

Antwort

1

Warum verwenden Sie die statische globale Variable _filePassword in FilePassword() statt einer im Geltungsbereich?

So könnte es von außen modifiziert werden, oder sogar noch den zuletzt verwendeten Wert enthalten. Es ist auch nicht Thread-sicher ohne lock.

Abrechnen mit einer lokalen Variablen und es sollte in Ordnung sein.

public static String FilePassword() 
{ 
    string retString = string.Empty; 
    while (retString.Length < 12) 
    { 
     retString += string.Concat(Membership.GeneratePassword(1, 0).Where(char.IsLetterOrDigit)); 
    }  
    return retString; 
} 

Sie können auch einen Rückgabewert protokollieren.


Beispiel für das Verständnis

if (FileUploadControl.HasFile) 
{ 

    fileName = Path.GetFileName(FileUploadControl.FileName); 
    FileUploadControl.SaveAs(FileSavePath + fileName); 
    string filePassword = Settings.FilePassword(); // Contains the Password 

    using (ZipFile zip = new ZipFile()) 
    { 
     var file = FileUploadControl.PostedFile; 
     zip.Encryption = EncryptionAlgorithm.PkzipWeak;    
     zip.Password = filePassword; // <-- Set password for ZIP 
     zip.TempFileFolder = tempPath; 
     zip.AddFile(FileSavePath + file.FileName, ""); 
     File objFile = new File(file.FileName, FileSavePath); 
     zip.Save(FileSavePath + file.FileName); 
    } 

    // Log this value! 
    Log(filePassword); 
} 
+0

guten Punkt. Es war vom vorherigen Code, als das Passwort direkt mit 'GeneratePassword' generiert wurde, also auch mit Sonderzeichen. Wird Ihren Vorschlag versuchen, um zu sehen, ob es hilft. – Mony

+0

@Mony Sie könnten versuchen, wenn Ihr Problem auftritt, wenn zwei Benutzer gleichzeitig eine Zip-Datei anfordern. – Smartis

+0

Ihre Änderung generiert 4 verschiedene Passwörter und nicht von ihnen ist korrekt zum Entpacken der Datei. Mein Logbuch: '10/4/2017 11:22:55 AM => Passwort von FilePassword Methode: iowSYgGB4Nbi 04.10.2017 11:22:55 AM => Passwort von FilePassword Methode: mmnZeM1sz3ln 10/4/2017 11 : 22: 55 AM => Passwort von ZIP-Datei: mmnZeM1sz3ln 10/4/2017 11:22:57 AM => Passwort von FilePassword Methode: 3xUeKXkWveIv 04.10.2017 11:22:58 AM => Passwort von FilePassword Methode: nKNZW67O6yi1 'beachten Sie die ZIP-Datei Passwort, das beim Zippen verwendet wurde, auch dieses funktioniert nicht – Mony

Verwandte Themen