Autor Tema: Encriptación de archivos con VB.Net y dividir archivos grandes y unir con .bat  (Leído 4767 veces)

Brandonlin

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Bueno, esta es la primera aplicación con carácter profesional que he creado. Acepto ideas de todo tipo, y si proporcionan códigos para su mejora intentaré anexarlos lo más pronto posible, perdón si el código fuente está desorganizado, no me ha dado tiempo de organizarlo. Bueno, ahora la descripción

1. Permite dividir archivos grandes y crear un archivo .bat para su unión (solamente si no se ha encriptado el archivo)

2. Encriptación de varios tamaños para la seguridad del archivo

3. Claves seguras gracias a la encriptación de las mismas (sólo puede leerlas el programa)

4. Programa ligero y de fácil uso

5. Ayudas para entender las funciones del programa

Nota: Si alguien me pudiera ayudar para volver más comprensible el código se lo agradecería mucho

Al parecer, el foro no me permite expresar todo el código, así que dejo el link para modificaciones

Código: [Seleccionar]
Imports System.IO
Imports System.Collections
Public Class form1
    Dim Tamaño As Long
    Dim TamañoRes As Long
    Dim Encriptar As Boolean
    Dim NumCrip As Byte
    Dim Encrip() As Byte
    Dim X As Long
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        With OpenFileDialog1
            .InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer)
            Dim ret As DialogResult = .ShowDialog ' abre el diálogo 
            ' si se presionó el botón aceptar ... 
            If ret = Windows.Forms.DialogResult.OK Then
                TextBox1.Text = .FileName
            End If
            .Dispose()
            If ComboBox1.Text = "" Then
                ComboBox1.Text = 2
            End If
            CalcularPesoFile(CLng(ComboBox1.Text))
        End With
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        With FolderBrowserDialog1
            Dim ret As DialogResult = .ShowDialog ' abre el diálogo 

            ' si se presionó el botón aceptar ... 
            If ret = Windows.Forms.DialogResult.OK Then
                TextBox2.Text = .SelectedPath
            End If
            .Dispose()
        End With
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Call CortarArchivo()
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        salir()
    End Sub

    Private Sub CortarArchivo() ' Procedimiento principal para cortar el archivo
        Dim NumPartesByte As Long = ComboBox1.Text
        Dim FileData() As Byte
        Dim FileWrite() As Byte
        Dim Data As String = TextBox1.Text
        Dim archivoBAT As String
        Dim Parte As Long = 1
        Dim pos As Long = 0
        Dim pos2 As Long = 0
        Dim pos3 As Long = 1
        Dim Vector() As String
        Dim Ruta As String
        Dim ValoresFal() As Byte
        Dim ClaveCrip() As Byte = {32, 78, 42, 206, 231, 128, 61, 220, 43, 173, 11, 178, 106, 230, 40, 240, 224, 100, 82, 114, 73, 9, 160, 137, 47, 207, 44, 142, 109, 111, 123, 84, 63, 200, 221, 115, 2, 80, 161, 125, 226, 38, 7, 215, 209, 23, 252, 165, 22, 72, 143, 183, 53, 159, 103, 236, 156, 193, 107, 126, 189, 139, 179, 246, 168, 18, 127, 4, 204, 75, 17, 194, 88, 135, 87, 65, 158, 8, 138, 112, 235, 238, 16, 134, 195, 36, 233, 83, 148, 66, 104, 180, 6, 121, 152, 94, 208, 155, 186, 77, 162, 41, 49, 184, 243, 190, 27, 54, 57, 244, 124, 227, 234, 25, 26, 91, 98, 60, 164, 120, 185, 213, 177, 86, 174, 251, 132, 76, 62, 170, 146, 95, 175, 171, 21, 24, 229, 58, 45, 13, 241, 228, 74, 31, 3, 237, 222, 214, 167, 247, 239, 188, 245, 169, 153, 157, 181, 52, 96, 133, 34, 166, 67, 191, 144, 151, 33, 196, 90, 211, 20, 12, 39, 19, 201, 129, 51, 48, 217, 102, 187, 176, 136, 64, 197, 30, 140, 154, 147, 253, 131, 85, 81, 216, 117, 108, 219, 192, 210, 1, 225, 141, 37, 203, 122, 69, 223, 99, 232, 92, 5, 79, 163, 118, 46, 254, 35, 110, 202, 70, 248, 182, 150, 145, 89, 28, 14, 29, 212, 101, 249, 172, 56, 59, 130, 255, 205, 97, 55, 218, 105, 71, 198, 113, 116, 199, 68, 250, 50, 242, 15, 93, 149, 10, 119, 0}
        FileData = My.Computer.FileSystem.ReadAllBytes(TextBox1.Text)
        If Encriptar = True Then
            Timer1.Enabled = False
            For i = 0 To (Tamaño - 1)
                For Me.X = 0 To NumCrip
                    If FileData(i) = Encrip(X) Then
                        FileData(i) = X
                        GoTo Encontrado
                    End If
                Next
Encontrado:
            Next
            X = 0
            ReDim ValoresFal(7)
            For i = 0 To 7
                ValoresFal(i) = FileData(i)
                FileData(i) = 255
            Next
            FileData(0) = ComboBox1.Text
            Timer1.Enabled = True
        End If
        ProgressBar1.Minimum = 0
        ProgressBar1.Value = 0
        ProgressBar1.Maximum = CLng(ComboBox1.Text)
        Vector = Split(Data, "\")
        Vector(1) = Vector(Vector.GetUpperBound(0))
        Ruta = TextBox2.Text & "\" & Vector(1) & ".bat"
        archivoBAT = ("copy /b ") + Chr(34) & (Parte) & (Vector(1)) + Chr(34) + Chr(32) + Chr(34) + (Vector(1)) + Chr(34) + Chr(13)
        TextBox5.Text = archivoBAT
        ReDim FileWrite(CLng(TextBox4.Text - 1))
        For Parte = 1 To CLng(ComboBox1.Text)
            If Parte = CLng(ComboBox1.Text) Then
                ReDim FileWrite(CLng(TextBox4.Text + TamañoRes) - 1)
                For i = 1 To CLng(TextBox4.Text + TamañoRes)
                    FileWrite(pos2) = FileData(pos)
                    pos2 = pos2 + 1
                    pos = pos + 1
                Next i
                File.WriteAllBytes(TextBox2.Text & "\" & CStr(Parte) & Vector(1), FileWrite)
                archivoBAT = "copy /b" + Chr(32) + Chr(34) & Vector(1) + Chr(34) & "+" + Chr(34) & Parte & Vector(1)
                TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
                If CheckBox1.Checked = True Then
                    archivoBAT = "del " + Chr(34) & Parte & Vector(1) + Chr(34) & " /f /q"
                    TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
                End If
                ProgressBar1.Value = ProgressBar1.Value + 1
                archivoBAT = "del " + Chr(34) & Vector(1) & ".bat" + Chr(34) & " /f /q"
                TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
                If Encriptar = True Then
                    File.WriteAllText(Ruta, TextBox5.Text)
                End If
            Else
                For i = 1 To CLng(TextBox4.Text)
                    FileWrite(pos2) = FileData(pos)
                    pos2 = pos2 + 1
                    pos = pos + 1
                Next i
                File.WriteAllBytes(TextBox2.Text & "\" & CStr(Parte) & Vector(1), FileWrite)
                pos2 = 0
                archivoBAT = "copy /b" + Chr(32) + Chr(34) & Vector(1) + Chr(34) & "+" + Chr(34) & Parte & Vector(1) + Chr(34)
                ProgressBar1.Value = ProgressBar1.Value + 1
                If Parte <> 1 Then
                    TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
                End If
                If CheckBox1.Checked = True Then
                    archivoBAT = "del " + Chr(34) & Parte & Vector(1) + Chr(34) & " /f /q"
                    TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
                End If
            End If
        Next Parte
        If Encriptar = True Then
            TextBox5.Text = ""
            TextBox5.Text = Hex(ValoresFal(0))
            For i = 1 To 7
                TextBox5.Text = TextBox5.Text & "." & Hex(ValoresFal(i))
            Next
            For i = 0 To NumCrip
                TextBox5.Text = TextBox5.Text & "." & Hex(Encrip(i))
            Next
            File.WriteAllText(TextBox2.Text & "\" & Vector(1) & ".crip", TextBox5.Text)
            FileData = File.ReadAllBytes(TextBox2.Text & "\" & Vector(1) & ".crip")
            Tamaño = FileLen(TextBox2.Text & "\" & Vector(1) & ".crip")
            For y = 0 To (Tamaño - 1)
                For Me.X = 0 To 255
                    If FileData(y) = ClaveCrip(X) Then
                        FileData(y) = X
                        GoTo Encontrado2
                    End If
                Next
Encontrado2:
            Next
            File.WriteAllBytes(TextBox2.Text & "\" & Vector(1) & ".crip", FileData)
        End If
        MsgBox("Se terminó la división del archivo", MsgBoxStyle.Information, "Finalizado")
        ProgressBar1.Value = 0
    End Sub

    Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
        If ComboBox1.Text = "" Then
            TextBox4.Text = ""
        Else
            If IsNumeric(ComboBox1.Text) Then
                CalcularPesoFile(CLng(ComboBox1.Text))
            Else
                MsgBox("Solo se aceptan números en la cantidad de partes", MsgBoxStyle.Critical, "Error")
                ComboBox1.Text = ""
            End If
        End If
    End Sub

    Private Sub CalcularPesoFile(Num As Long)
        If Trim(TextBox1.Text) = "" Then
            MsgBox("No ha especificado una ruta de archivo", MsgBoxStyle.Critical, "Error")
            Exit Sub
        End If
        If Dir(TextBox1.Text) <> "" Then
            Tamaño = FileLen(TextBox1.Text)
            If Tamaño < 2000000000 Then
                If Tamaño < Num Then
                    MsgBox("El numero de partes supera al tamaño del archivo", MsgBoxStyle.Critical, "Error")
                Else
                    TextBox4.Text = Int(Tamaño / Num)
                    TamañoRes = (Math.Abs((TextBox4.Text * Num) - Tamaño))
                    Label3.Text = "El tamaño del archivo es " & CStr(Tamaño) & " bytes"
                End If
            Else
                MsgBox("El archivo es demasiado grande para ser dividido", MsgBoxStyle.Critical, "Error")
            End If
        Else
            MsgBox("El archivo no existe", MsgBoxStyle.Critical, "Error")
        End If
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        If TextBox1.Text <> "" And TextBox2.Text <> "" And ComboBox1.Text <> "" Then
            Button3.Enabled = True
        Else
            Button3.Enabled = False
        End If
    End Sub

    Private Sub CómoDividirArchivosToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CómoDividirArchivosToolStripMenuItem.Click
        MsgBox("Primero se introduce la ruta del archivo a dividir, después se introduce la ruta en donde guardar los archivos segmentados y posteriormente se seleccionan las partes en las que se va a dividir el archivo; si se desea borrar las partes despues de la unión, solo palomea la casilla correspondiente", MsgBoxStyle.Question, "Ayuda")
    End Sub

    Private Sub AcercaDeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AcercaDeToolStripMenuItem.Click
        MsgBox("Programa creado por Industrias Antonio, todos los derechos reservador, © Industrias Antonio 2013-2015", MsgBoxStyle.Question, "Acerca de")
    End Sub

    Private Sub TiposDeEncriptaciónToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TiposDeEncriptaciónToolStripMenuItem.Click
        MsgBox("La encriptación sirve como una medida de seguridad para evitar el robo de información y archivos, hay diferentes tipos, pero la de 256 bits es la más compleja, con un tiempo de encriptación muy largo, y la de 8 bits es muy sencilla, pero encripta el archivo rápidamente, asi que es decisión del usuario, aunque para los documentos se recomienda una clave de 256 bits", MsgBoxStyle.Question, "Ayuda")
    End Sub

    Private Sub SalirToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SalirToolStripMenuItem.Click
        salir()
    End Sub

    Private Sub FileJoinerToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FileJoinerToolStripMenuItem.Click
        Me.Hide()
        Form2.Show()
    End Sub

    Private Sub salir()
        If MsgBox("¿Desea salir?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Salir") = vbYes Then
            End
        End If
    End Sub

    Private Sub Clavede256bitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe256BitsToolStripMenuItem.Click
        If Encriptar = False Then
            If MsgBox("La encriptación de 256 bits con archivos grandes puede tardar más de lo esperado, e incluso, puede causar lentitud en su equipo, ¿seguro que desea continuar?", MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, "Advertencia") = vbYes Then
                NumCrip = 255
                Encriptar = True
                ReDim Encrip(255)
                Call ClaveEncriptacion()
            Else
                ClaveDe256BitsToolStripMenuItem.Checked = False
            End If
        Else
            Encriptar = False
        End If
    End Sub

    Private Sub ClaveDe128BitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe128BitsToolStripMenuItem.Click
        If Encriptar = False Then
            If MsgBox("La encriptación de 128 bits con archivos grandes puede tardar más de lo esperado, e incluso, puede causar lentitud en su equipo, ¿seguro que desea continuar?", MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, "Advertencia") = vbYes Then
                NumCrip = 127
                Encriptar = True
                ReDim Encrip(127)
                Call ClaveEncriptacion()
            Else
                ClaveDe128BitsToolStripMenuItem.Checked = False
            End If
        Else
            Encriptar = False
        End If
    End Sub

    Private Sub ClaveDe64BitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe64BitsToolStripMenuItem.Click
        If Encriptar = False Then
            NumCrip = 63
            Encriptar = True
            ReDim Encrip(63)
            Call ClaveEncriptacion()
        Else
            Encriptar = False
        End If
    End Sub

    Private Sub ClaveDe32BitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe32BitsToolStripMenuItem.Click
        If Encriptar = False Then
            NumCrip = 31
            Encriptar = True
            ReDim Encrip(31)
            Call ClaveEncriptacion()
        Else
            Encriptar = False
        End If
    End Sub

    Private Sub ClaveDe16BitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe16BitsToolStripMenuItem.Click
        If Encriptar = False Then
            NumCrip = 15
            Encriptar = True
            ReDim Encrip(15)
            Call ClaveEncriptacion()
        Else
            Encriptar = False
        End If
    End Sub

    Private Sub ClaveDe8BytesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe8BytesToolStripMenuItem.Click
        If Encriptar = False Then
            NumCrip = 7
            Encriptar = True
            ReDim Encrip(7)
            Call ClaveEncriptacion()
        Else
            Encriptar = False
        End If
    End Sub

    Private Sub ClaveEncriptacion()
        Dim Repetido As Boolean
        Randomize()
        For i = 1 To NumCrip 'genera solo los numeros del tamaño de la encriptación
            Repetido = False
            X = Int(Rnd() * (NumCrip + 1)) + 0 'genero numeros aleatorios entre 1 y el tamaño de la encriptación
            While Repetido = False
                For j = 0 To i - 1 'checar cada elemento del arreglo para buscar numero repetido
                    If i > 0 Then
                        If X = Encrip(j) Then
                            Repetido = False
                            X = Int(Rnd() * (NumCrip + 1)) + 0 'sigue generando números si éste está repetido
                            j = -1
                        ElseIf j = i - 1 Then
                            Repetido = True
                        End If
                    Else
                        Repetido = True
                    End If
                Next j
            End While
            Encrip(i - 1) = X
        Next i
    End Sub
End Class

Link del proyecto completo

https://mega.co.nz/#!yBUTmYJJ!JzL0IvD-zTNpQE_hlOMmQLlzLohHvv9DP2zd0ZE2v9k
« Última modificación: 23 de Marzo 2015, 08:41 por Alex Rodríguez »

Príncipe_Azul

  • Principiante
  • **
  • Mensajes: 71
    • Ver Perfil
    • Foro ArgentinaIRC - Ayuda de Programación General, IRC y mIRC Scripting!
Re:Si alguien me pudiera ayudar a mejorar mi programa VB.Net
« Respuesta #1 en: 09 de Marzo 2015, 07:45 »
Hola, antes que nada, muchas gracias por el código, no se nada de Visual Basic, pero te daré mi punto de vista igualmente.

Me gustó bastante el orden del programa, no lo veo desordenado para nada, está muy bien ordenado y además de que usas espacios para la identación, en vez de tabulaciones, y por último utilizás 4 espacios tál como lo hago yo, me gustó ver la estructura del programa, parece muy bueno.

Lo único que deberías poner que sería importante, es una captura del programa, eso sería lo ideal, si el mismo tiene varias ventanas, al menos podrías poner la principal, es decir, la ventana padre.

Saludos!!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".