elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  SevenZipExtractor (Password)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: SevenZipExtractor (Password)  (Leído 3,855 veces)
rigorvzla

Desconectado Desconectado

Mensajes: 213


Ver Perfil
SevenZipExtractor (Password)
« en: 29 Mayo 2018, 01:40 am »

Hola amigos, hoy les traigo una inquietud y consulta , actualmente uso la libreria SevenZip para comprimir y descomprimir archivos, eh realizado trabajos interesantes con ella y me han quedado bien (comprimir / descomprimir), ahora tengo una inquietud y es, que al descomprimir archivos con contraseña me da un error, lo que necesito es saber , como puedo validar un archivo que, en caso de tener contraseña lo compare con un textbox y en caso de no tener contraseña seguir su proceso normal como ya lo hace.

mi codigo actual esta asi

Código
  1. public void metodoExtraccion()
  2.        {
  3.            AvisoDescargas des = new AvisoDescargas();
  4.            des.listaDescargas.Visibility = System.Windows.Visibility.Visible;
  5.            des.lblDescargaTitulo.Content = "EXTRAYENDO ARCHIVOS";
  6.            des.Show();
  7.  
  8.            Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog
  9.            {
  10.                Title = "Archivos a Descomprimir",
  11.                Filter = "Extraer (7z RAR Zip ISO|*.7z; *.rar; *.zip; *.iso",
  12.                Multiselect = true
  13.            };
  14.            if ((ofd.ShowDialog() == true))
  15.            {
  16.                StreamWriter sw = new StreamWriter("listfile.lst");
  17.                foreach (string n in ofd.FileNames)
  18.                {
  19.                    sw.WriteLine(n);
  20.                }
  21.                sw.Close();
  22.  
  23.                string zipName = ofd.FileName;
  24.  
  25.                System.Threading.Tasks.Task.Run(() => {
  26.                    using (var tmp = new SevenZipExtractor(
  27.  
  28.                    File.OpenRead(zipName)))
  29.                    {
  30.  
  31.                        tmp.FileExtractionStarted += (s, e) =>
  32.                        {
  33.                            Dispatcher.Invoke(() => des.listaDescargas.Items.Add((String.Format("Extrayendo... [{0}%] {1}", e.PercentDone, e.FileInfo.FileName))));
  34.  
  35.                        };
  36.                        tmp.ExtractionFinished += (s, e) => { Dispatcher.Invoke(() => des.listaDescargas.Items.Add("Proceso Finalizado")); };
  37.                        try
  38.                        {
  39.                            Directory.CreateDirectory(ofd.SafeFileName);
  40.                            string nombre = Path.GetFileNameWithoutExtension(ofd.SafeFileName);
  41.                            string salida = Path.Combine(Settings.Default.directorioExtraidos, nombre);
  42.                            tmp.ExtractArchive(salida);
  43.                            MainWindow.habla.SpeakAsync("Extraccion Finalizada");
  44.                            Directory.Delete(ofd.SafeFileName, true);
  45.                        }
  46.                        catch (Exception)
  47.                        {
  48.                            des.lblPorcentaje.Content = "Necesita Contraseña";
  49.                            MainWindow.habla.Speak("No se puede extraer, archivo dañado o con contraseña");
  50.                        }
  51.  
  52.                    }
  53.                });
  54.            };
  55.        }

El codigo es totalmente funcional, espero puedan ayudarme con un ejemplo con validacion de contraseña y de ahi partir a adaptarlo a mi codigo , gracias de antemano.


« Última modificación: 29 Mayo 2018, 09:23 am por Eleкtro » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: SevenZipExtractor (Password)
« Respuesta #1 en: 29 Mayo 2018, 02:02 am »

Hola!

Fíjate ésto. En especial, la segunda respuesta: https://stackoverflow.com/questions/8047302/sevenzsharp-decode-with-password

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

rigorvzla

Desconectado Desconectado

Mensajes: 213


Ver Perfil
Re: SevenZipExtractor (Password)
« Respuesta #2 en: 29 Mayo 2018, 02:04 am »

si, ya eh visto eso y veo que ahi esta la respuesta, mas no la entiendo si podrias expplicarmelo como a bebe mongolico seria perfecto y disculpa la molestia
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.775



Ver Perfil
Re: SevenZipExtractor (Password)
« Respuesta #3 en: 29 Mayo 2018, 09:27 am »

Tan solo tienes que usar la sobrecarga del constructor de la clase SevenZipExtractor, la cual toma una contraseña como segundo parámetro.



Por cierto, esto es completamente inapropiado (mal hábito de programación):
Citar
(ofd.ShowDialog() == true)

El valor de retorno no es booleano, sino un valor de la enumeración DialogResult...

Lo que estás haciendo con ese casting booleano en realidad es: (ofd.ShowDialog() != DialogResult.None); en este caso debería ser: (ofd.ShowDialog() == DialogResult.Ok). Piensa de lo contrario que ocurrirá con dialogos de más botones cuyo valor de retorno no consista solamente en DialogResult.Cancel y DialogResult.Ok...

Y en la linea de File.OpenRead(zipName))) en ningún momento estás asignando una referencia del stream (el valor de retorno de dicha función) para luego liberarlo mediante el método Close o Dispose, por lo tanto no vas a poder manipular/leer esos archivos abiertos por tu programa desde fuera del programa... puesto que están siendo abiertos en modo lectura de forma "permanente" por tu programa (hasta que finalice la terminación del programa).
 
Saludos.
« Última modificación: 29 Mayo 2018, 09:49 am por Eleкtro » En línea


rigorvzla

Desconectado Desconectado

Mensajes: 213


Ver Perfil
Re: SevenZipExtractor (Password)
« Respuesta #4 en: 29 Mayo 2018, 12:54 pm »

muchisimas gracias elektro por tu observacion, ya corregi y aprendi lo del dialogresult , cosa que tenia mala en todo el proyecto , pero tenia uno bien planteado mas no sabia por que me daba error, y era por la referencia que era win32 y no form.

Punto dos : no se como reparar lo del FileRead

Punto tres: este el mas importante y el inicio del post, podrias darme un ejemplo para poderme guiar es que no se en que parte del codigo pasar el parametro ya que lo que eh intentado hasta ahora me genera error.

Gracias nuevamente, por que me toco colocar como dices tu 2 botones y acciones diferentes en el fileDialog y a pesar que me percate y repare eso, crei que bastaba con colocarlo true, pero veo que , no es malo, es incorrecto, la idea es decir que hacer y no dejarlo sobre entenido, corrigeme si me equivoco .

Encontre este ejemplo pero no se como hacerlo util a mi caso
http://csharpexamples.com/zip-and-unzip-files-programmatically-in-c/
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.775



Ver Perfil
Re: SevenZipExtractor (Password)
« Respuesta #5 en: 29 Mayo 2018, 13:41 pm »

Punto dos : no se como reparar lo del FileRead

En realidad si que sabes pero te cuesta darte cuenta, o al menos se supone que sabes, puesto que aparentas saber utilizar la instrucción using en otras partes del código...


Si no tienes claro qué hacer, entonces tienes que leer y estudiar lo que explican en ese artículo, y leer sobre la interfaz IDisposable y el método IDisposable.Dispose...



Punto tres: este el mas importante y el inicio del post, podrias darme un ejemplo para poderme guiar es que no se en que parte del codigo pasar el parametro ya que lo que eh intentado hasta ahora me genera error.

Con lo que te expliqué debería ser más que suficiente:
Cita de: Elektro
Tan solo tienes que usar la sobrecarga del constructor de la clase SevenZipExtractor, la cual toma una contraseña como segundo parámetro.

...ahí te estoy indicando donde tienes que pasarle el parámetro: al constructor de la clase SevenZipExtractor. Concretamente aquí:

Código
  1. using (var tmp = new SevenZipExtractor( FileStream, "contraseña" ) {
  2.    ...
  3. }



me toco colocar como dices tu 2 botones y acciones diferentes en el fileDialog y a pesar que me percate y repare eso, crei que bastaba con colocarlo true, pero veo que , no es malo, es incorrecto, la idea es decir que hacer y no dejarlo sobre entenido, corrigeme si me equivoco .

Hmmm... no entiendo a lo que te refieres con "la idea es decir que hacer y no dejarlo sobre entenido, corrigeme si me equivoco", pero lo que te intento decir es facil de comprender si conoces lo básico del lenguaje, al menos si conoces los tipos primitivos y comprendes sus diferencias...

La enumeración DialogResult consta de 8 valores enteros, del 0 al 7:

Código
  1. namespace System.Windows.Forms {
  2.  
  3.    [ComVisible(true)]
  4.    public enum DialogResult {
  5.        None = 0,
  6.        OK = 1,
  7.        Cancel = 2,
  8.        Abort = 3,
  9.        Retry = 4,
  10.        Ignore = 5,
  11.        Yes = 6,
  12.        No = 7
  13.    }
  14.  
  15. }

El problema es que cuando conviertes cualquierera de esos valores al tipo primitivo boolean se toman todos como true, exceptuando el 0 (None), que equivale a false...

Por si no ha quedado claro... en tu código haces esto:
Citar
if (ofd.ShowDialog() == true)
...pero eso siempre te va a devovler true, por que la función OpenFileDialog.ShowDialog muestra una ventana de diálogo de dos botones que solo puede devolver DialogResult.OK (1) y DialogResult.Cancel (2), y ambos valores equivalen a true.

En la propia descripción del miembro lo dice claramente:
Cita de: Visual Studio - Object Inspector
Returns: System.Windows.Forms.DialogResult.OK if the user clicks OK in the dialog box; otherwise, System.Windows.Forms.DialogResult.Cancel.

Saludos.
« Última modificación: 29 Mayo 2018, 13:43 pm por Eleкtro » En línea


rigorvzla

Desconectado Desconectado

Mensajes: 213


Ver Perfil
Re: SevenZipExtractor (Password)
« Respuesta #6 en: 29 Mayo 2018, 18:06 pm »

si claro , todo lo entendi , gracias por el ejemplo, entendi a la perfeccion lo de filedialog y mas claro aun por la explicacion, me tocara leer esa respuesta al FileReader porque como dices aun no lo veo, eso me aclarara la vista.

Nuevamente gracias por la ayuda.

PD. En ocasiones no entiendo a la primera lo que explicas pero luego de un tiempo y de haber estudiado mas, regreso a leer con calma y la solucion era mas que evidente hasta util para otros propositos. Gracias por la paciencia . Feliz Dia!

En línea

rigorvzla

Desconectado Desconectado

Mensajes: 213


Ver Perfil
Re: SevenZipExtractor (Password)
« Respuesta #7 en: 30 Mayo 2018, 05:10 am »

disculpen edito esto por no saber como eliminar el comentario, ya resolvi el problema  MUCHAS gracias!
« Última modificación: 30 Mayo 2018, 05:17 am por rigorvzla » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado]come saco un password de msn cuando esta en remember password??
Mensajería
YANDEL 4 6,600 Último mensaje 24 Junio 2011, 11:42 am
por .:UND3R:.
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines